gpt4 book ai didi

c# - foreach 循环中的异步调用

转载 作者:行者123 更新时间:2023-11-30 20:15:56 25 4
gpt4 key购买 nike

更多的是概念问题...有什么理由在这样的 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 是不是一个坏主意> 列表?

Entity Framework 、Linq 中是否有任何属性/方法更适合此类任务?比嵌入 foreach 循环更好的主意?

(以防万一有人想要一些上下文......IRL,items 是传感器读数的列表。properties 是将原始读数转换为有意义的数学方程式不同单位的体积和重量等数据……然后将这些计算出的数据点存储在数据库中。)

最佳答案

不,没有,但是您在这里错过了一些概念。

由于您使用异步方法,因此应调用 ProcessItems 方法 ProcessItemsAsync 并返回一个任务

这对你有用:Async/Await - Best Practices in Asynchronous Programming

看你的需求,建议加上CancellationToken,同时考虑异常处理,注意不要swallow exceptions .

关于c# - foreach 循环中的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51841860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com