更多关于概念的问题...
有什么理由在这样的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/

10-10 00:50