8

次のコードでは、task1 と task2 は互いに独立しており、並行して実行できます。次の 2 つの実装の違いは何ですか?

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

最初の例では、両方のタスクが完了するのを待ってから、両方の結果を取得します。

2 番目の例では、タスクが 1 つずつ完了するまで待機します。

コードにとってより明確な方を使用する必要があります。両方のタスクの結果の種類が同じ場合は、次のWhenAllように結果を取得できます。

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

最初の構文はより読みやすくなっています。結果を取得する前に、すべてのタスクが完了するまで待つつもりであることを明確に述べています。2番目の代わりにそれを使用するのに十分合理的だと思います。

また、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; 
于 2013-09-11T17:25:12.447 に答える