Foreach 与异步 C#

0 c# .net-core

我像这样调用异步方法:

foreach (var item in someList)
{
    item.someValue = asdf.Where(() => SomeMethod(item)).FirstOrDefaultAsync();
}
Run Code Online (Sandbox Code Playgroud)

我如何让它异步工作?我想等待所有的结果。我正在使用.Net Core 3.1

Ste*_*ary 12

对于异步并发,最好的方法是使用await Task.WhenAll

var tasks = someList.Select(async item =>
{
  item.someValue = await asdf.Where(() => SomeMethod(item)).FirstOrDefaultAsync();
});
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

但是,看起来您可能正在使用实体框架。在这种情况下,您需要注意实体框架不支持同一上下文上的多个并发查询。您需要一次运行一个查询,或者使用多个数据库上下文。

  • 我觉得您已经提出了一个重要的危险信号,即 FirstOrDefaultAsync 可能是实体框架的一部分,并且不支持同一上下文上的多个并发查询。如果你的文字能更粗、更闪烁就好了。我会投票和评论,这就是我所能提供的帮助。 (4认同)
  • **<眨眼>谢谢!</眨眼>** (2认同)