使用Async对List <T> .ForEach()的任何指向?

VSO*_*VSO 5 c# asynchronous async-await

我遇到了这段代码:

items.ForEach(async item =>
{
     doSomeStuff();   
     await mongoItems.FindOneAndUpdateAsync(mongoMumboJumbo);
     await AddBlah(SqlMumboJumbo);
});
Run Code Online (Sandbox Code Playgroud)

使这个.forEach委托有任何意义,还是只是一个正常的foreach循环?只要包含循环的函数是异步的,默认情况下这是异步的吗?

Yuv*_*kov 7

收到的代表ForEachAction<T>:

public void ForEach(Action<T> action)
Run Code Online (Sandbox Code Playgroud)

这意味着,您在其中使用的任何异步委托将有效地转变为async void方法.这些都是"一劳永逸"的执行方式.这意味着你的foreach不会在继续调用列表中下一个项目的委托之前异步等待,这可能是一个不受欢迎的行为.

foreach改为使用常规.

旁注 - Eric Lippert的foreach VS ForEach,伟大的博客文章.