8

在下面的代码中 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() 方法的返回类型是不同的。

4

2 回答 2

11

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

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

您应该使用对您的代码更清晰的任何一个。如果两个任务具有相同的结果类型,您可以WhenAll这样检索结果:

var results = await Task.WhenAll(task1, task2);
于 2013-09-11T17:17:18.173 回答
2

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

也少写,如果你添加第三或第四个任务......即:

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

相比:

var result1 = await task1; 
var result2 = await task2; 
var result3 = await task3; 
var result4 = await task4; 
于 2013-09-11T17:25:12.447 回答