首页 > 解决方案 > 使用 C# 并行执行任务。我这样做对吗?

问题描述

我已经搜索并阅读过,我只是想确定我是否正确。我要并行运行三种方法,并且我想确保在继续之前完成所有方法。它们都是异步的,并且此代码位于异步方法中。我已经这样做了:

public async ProcessBegin() {
   //... some code

   await SomeProcess();
   await AnotherMethod().
}

public async SomeProcess() {
   //.. some code    

   var tasks = new Task[3];
   tasks[0] = method1();
   tasks[1] = method2();
   tasks[2] = method3();

   Task.WaitAll(tasks);
}

public async Method1(){...}
public async Method2(){...}
public async Method3(){...}

这是正确的吗?

标签: c#parallel-processingtask

解决方案


Task.WaitAll同步阻塞,因此Parallel.Invoke如果您打算这样做,您可以使用:

Parallel.Invoke(() => method1(), () => method2(), () => method3());

只要methodX方法本身不是异步的,这就会起作用。Parallel.ForEach 不适用于异步操作。

如果你想等待任务异步完成,你应该使用Task.WhenAll

var tasks = new Task[3];
tasks[0] = method1();
tasks[1] = method2();
tasks[2] = method3();

await Task.WhenAll(tasks);

推荐阅读