是 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()方法的返回类型是不同的。
您的第一个示例将等待两个任务完成,然后检索两个任务的结果。
第二个示例将等待任务一次完成一个。
您应该使用对您的代码更清晰的一个。如果两个任务具有相同的结果类型,则可以按如下方式从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;