【发布时间】:2019-12-04 15:48:40
【问题描述】:
我需要使用 Task.WhenAll 同时运行 3 个或更多任务,一旦 Task.WhenAll 完成执行所有任务,我想捕获所有任务的结果。
如何获取那些使用 Task.WhenAll 执行的任务的结果?
我应该使用.Result 还是await?为什么?
.Result 会被屏蔽吗?
这是代码示例:
var task1 = Task1();
var task2 = Task2();
var task3 = Task3();
await Task.WhenAll(task1, task2, task3);
// 1st approach:
var result1 = task1.Result;
var result2 = task2.Result;
var result3 = task3.Result;
// 2nd approach:
var result1 = await task1;
var result2 = await task2;
var result3 = await task3;
【问题讨论】:
-
...或没有
Task.WhenAll的第二种方法... -
恕我直言,第二个比第一个少 1 个 LOC
-
你如何定义“最佳”?
-
.Result是阻塞的,除非此时任务已经解决。其他一切都只是业务逻辑需要的问题。任务可以同时运行,也可以按顺序运行。选择适合所需的选项。 -
@Selvin 但这样我们不会从并发执行任务中受益
标签: c# .net asynchronous async-await task