是 Task.WhenAll 在示例代码中必需的

本文关键字:代码 Task WhenAll | 更新日期: 2023-09-27 18:31:01

在下面的代码中,task1 和 task2 彼此独立,可以并行运行。以下两种实现有什么区别?

var task1 = GetList1Async();
var task2 = GetList2Async();
await Task.WhenAll(task1, task2);
var result1 = await task1; 
var result2 = await task2; 

var task1 = GetList1Async();
var task2 = GetList2Async();
var result1 = await task1; 
var result2 = await task2; 

我为什么要选择一个而不是另一个?

编辑:我想补充一点,GetList1Async()和GetList2Async()方法的返回类型是不同的。

是 Task.WhenAll 在示例代码中必需的

您的第一个示例将等待两个任务完成,然后检索两个任务的结果。

第二个示例将等待任务一次完成一个。

您应该使用对您的代码更清晰的一个。如果两个任务具有相同的结果类型,则可以按如下方式从WhenAll中检索结果:

var results = await Task.WhenAll(task1, task2);

第一个构造更具可读性。您明确表示您打算等待所有任务完成,然后再获得结果。我觉得用第二个来代替是合理的。

写作也更少,如果你添加第 3 个或第 4 个任务......即:

await Task.WhenAll(task1, task2, task3, task4);

与以下相比:

var result1 = await task1; 
var result2 = await task2; 
var result3 = await task3; 
var result4 = await task4;