假设我有一个类的这三个版本:
public MainClass
{
public async Task DoSomethingAsync()
{
foreach(OtherClass iterator in _otherClasses)
{
iterator.AnAsyncTask().ConfigureAwait(false);
}
}
}
public MainClass
{
public void DoSomething()
{
Parallel.ForEach(_list, async iterator =>
{
await iterator.AnAsyncTask().ConfigureAwait(false);
});
}
}
public MainClass
{
public void DoSomething()
{
Parallel.ForEach(_list, iterator =>
{
iterator.AnAsyncTask().ConfigureAwait(false);
});
}
}
在第一个中,我有一个调用异步方法的 foreach,但我不等待它完成就继续下一个项目,因此在实践中,这与使用并行 ForEach 并行运行各个项目不同吗?
在第二个中,我有一个 Parallel ForEach,因此它同时并行运行多个项目。 无论我是否等待,只有当该方法在同一次迭代中完成后我需要执行更多操作时,这才重要。
所以我的疑问是,在这种情况下使用 ForEach 或 Parallel.Foreach 有什么区别?
所有任务都尽快开始,代码从不等待任务完成。一旦所有任务开始,DoSomething()就会返回。
可选的并行度将限制并发任务,ForEach 将等待所有任务完成。
与 1) 基本相同。