Parallel.ForEach 和调用我不等待的异步方法的普通方法之间有什么区别?

问题描述 投票:0回答:1

假设我有一个类的这三个版本:

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 有什么区别?

c# parallel.foreach
1个回答
0
投票
  1. 所有任务都尽快开始,代码从不等待任务完成。一旦所有任务开始,DoSomething()就会返回。

  2. 可选的并行度将限制并发任务,ForEach 将等待所有任务完成。

  3. 与 1) 基本相同。

© www.soinside.com 2019 - 2024. All rights reserved.