await Task.WhenAll
與多個 await
的比較在非同步程式設計中,處理多個任務時,開發者常常需要在使用單一的 await Task.WhenAll
語句和依序執行多個 await
語句之間做出選擇。本文探討了使用 await Task.WhenAll
相比多個 await
的優勢,尤其是在任務完成順序不重要的場景下。
以下程式碼片段展示了兩種方法:
<code class="language-csharp">// 使用多个 await static async Task DoWork1() { var t1 = DoTaskAsync("t1.1", 3000); var t2 = DoTaskAsync("t1.2", 2000); var t3 = DoTaskAsync("t1.3", 1000); await t1; await t2; await t3; Console.WriteLine("DoWork1 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result)); } // 使用 await Task.WhenAll static async Task DoWork2() { var t1 = DoTaskAsync("t2.1", 3000); var t2 = DoTaskAsync("t2.2", 2000); var t3 = DoTaskAsync("t2.3", 1000); await Task.WhenAll(t1, t2, t3); Console.WriteLine("DoWork2 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result)); }</code>
為什麼 await Task.WhenAll
比多 await
更優?
錯誤傳播: await Task.WhenAll
收集來自各個任務的所有錯誤,並將它們作為 AggregateException
傳播。這確保瞭如果一個或多個任務失敗,不會遺失任何錯誤。而多個 await
則會在先前的 await
拋出異常時隱藏錯誤。
保證完成: await Task.WhenAll
確保所有任務都將在其返回之前完成,即使某些任務已出錯或被取消。當你的程式碼依賴所有任務的結果都可用時,這一點尤其有用。
簡化程式碼: 使用 await Task.WhenAll
使等待多個任務的語義在程式碼中明確,提高了可讀性並降低了並發相關錯誤的風險。
以上是`await Task.WhenAll` 與多個等待:處理多個非同步任務的首選方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!