如何等待任务(<T>异步 () => ... )



我正在尝试执行4个异步任务,例如

---- Task 1 -------------------
---- Task 2 -------------------
---- Task 3 ----- Task 4 ------

(x轴是时间(

我有

Task<T1> doT1 = ...
Task<T2> doT2 = ...

我需要一个按顺序执行3和4的包装器任务doT3T4,例如

T3 t3result = await ...
return await SomethingThatUsesT3ResultAsync(t3result);

所以我可以做

await Task.WhenAll(doT1, doT2, doT3T4);

我尝试了

var doT3T4 = new Task<T4>(async () => {
  T3 t3result = await ...
  return await SomethingThatUsesT3ResultAsync(t3result);
});

但这给了我错误

不能将异步lambda表达式转换为...

将任务3和4放在方法中

public async Task RunTask3And4()
{
    var result3 = await RunTask3();
    await RunTask4(result3);
}

然后与其他任务一起使用

var tasks = new[]
{
    RunTask1(),
    RunTask2(),
    RunTask3And4()
};
await Task.WhenAll(tasks);

最新更新