更多关于概念的问题...
有什么理由在这样的foreach循环中对我的DataContext进行异步调用会是个坏主意吗?
private async Task ProcessItems(List<Item> items)
{
var modifiedItems = new List<modifiedItem>();
foreach (var item in items)
{
// **edited to reflect link between items and properties**
// var properties = await _context.Properties
// .Where(p => p.Condition == true).ToListAsync();
var properties = await _context.Properties
.Where(p => p.Condition == item.Condition).ToListAsync();
foreach (var property in properties)
{
// do something to modify 'item'
// based on the value of 'property'
// save to variable 'modifiedItem'
modifiedItems.Add(modifiedItem)
}
}
await _context.ModifiedItems.AddRangeAsync(modifiedItems);
await _context.SaveChangesAsync();
}
由于内部的foreach循环依赖于
properties
变量,它是否在完全实例化properties
变量后才开始?既然
modifiedItems
变量是在父级foreach循环之外声明的,那么异步地将每个modifiedItem
添加到modifiedItems
列表是否是一个坏主意?实体框架Linq中是否有任何属性/方法,更适合此类任务的是什么?比执行嵌入式foreach循环更好的主意?
(如果有人想要一些上下文信息,……IRL,
items
是传感器读数的列表。properties
是数学方程式,可将原始读数转换为有意义的数据,例如以不同单位表示的体积和重量...然后这些计算出的数据点正在存储在数据库中。) 最佳答案
不,没有,但是您在这里错过了一些概念。
由于使用的是异步方法,因此ProcessItems
方法应称为ProcessItemsAsync
并返回task
。
这对您有用:Async/Await - Best Practices in Asynchronous Programming
根据您的需求,建议添加CancellationToken
并考虑异常处理,请注意不要使用swallow exceptions。
关于c# - foreach循环中的异步调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51841860/