【发布时间】:2018-04-30 05:28:14
【问题描述】:
我正在尝试执行 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 表达式转换为 ...
【问题讨论】:
-
你想要的不是 .ContinueWith()
-
为什么需要包装任务?
T3 t3result = await ...; var doT3T4 = SomethingUsesT3ResultAsync(t3result); await Task.WhenAll(doT1, doT2, doT3T4);具有相同的语义。 -
正如@pm_2 提到的,看看docs.microsoft.com/en-us/dotnet/api/…
-
您在哪里看到直接实例化
Task是一种很好的做法,或者甚至应该这样做?
标签: c# .net asynchronous async-await