如何等待任务<t>(async()=&gt; ...)

时间:2018-04-29 21:21:44

标签: c# .net asynchronous async-await

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

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

(x轴是时间)

我有

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

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

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表达式转换为...

1 个答案:

答案 0 :(得分:0)

将任务3和4放在方法

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

然后与其他任务一起使用

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