await Task.WhenAll
tunggal dan berbilang await
Dalam pengaturcaraan tak segerak, apabila mengendalikan berbilang tugas, pembangun selalunya perlu memilih antara menggunakan satu pernyataan await Task.WhenAll
atau melaksanakan berbilang await
pernyataan dalam urutan. Artikel ini meneroka kelebihan menggunakan await Task.WhenAll
berbanding berbilang await
s, terutamanya dalam senario di mana susunan tugasan diselesaikan tidak penting.
Coretan kod berikut menunjukkan kedua-dua kaedah:
<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>
Mengapa await Task.WhenAll
lebih baik daripada berbilang await
?
Penyebaran ralat: await Task.WhenAll
mengumpul semua ralat daripada pelbagai tugas dan menyebarkannya sebagai AggregateException
. Ini memastikan bahawa jika satu atau lebih tugas gagal, tiada ralat hilang. Berbilang await
akan menyembunyikan ralat apabila await
sebelumnya melemparkan pengecualian.
Dijamin Selesai: await Task.WhenAll
Menjamin bahawa semua tugasan akan diselesaikan sebelum pemulangannya, walaupun beberapa tugasan mempunyai ralat atau dibatalkan. Ini amat berguna apabila kod anda bergantung pada hasil semua tugas yang tersedia.
Ringkaskan kod anda: Gunakan await Task.WhenAll
untuk menjadikan semantik menunggu berbilang tugasan jelas dalam kod anda, meningkatkan kebolehbacaan dan mengurangkan risiko pepijat berkaitan serentak.
Atas ialah kandungan terperinci `await Task.WhenAll` vs. Multiple Awaits: Manakah Kaedah Pilihan untuk Mengendalikan Berbilang Tugas Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!