Perbezaan utama antara Task.WaitAll() dan Task.WhenAll()
Apabila berurusan dengan tugas tak segerak, adalah penting untuk memahami perbezaan yang halus tetapi penting antara Task.WaitAll()
dan Task.WhenAll()
.
Task.WaitAll(): menyekat tunggu
Task.WaitAll()
ialah kaedah langsung yang menyekat urutan semasa sehingga semua tugas yang ditentukan telah menyelesaikan pelaksanaan. Ini ialah operasi segerak, yang bermaksud ia tidak akan kembali sehingga semua tugasan selesai.
Task.WhenAll(): Tunggu tak segerak
Task.WhenAll()
mengambil pendekatan yang berbeza. Ia mengembalikan objek Task
yang mewakili operasi yang menunggu semua tugasan yang ditentukan selesai. Ini membolehkan penggunaan model pelaksanaan tak segerak di mana penantian sebenar berlaku tanpa menyekat utas semasa.
Perbezaan dalam penggunaan
Perbezaan utama ialah Task.WaitAll()
akan menjeda urutan semasa, manakala Task.WhenAll()
menyediakan mekanisme menunggu tak segerak. Dalam kaedah async, anda boleh memanfaatkan Task.WhenAll()
untuk terus melaksanakan kod semasa tugasan masih berjalan. Ini ialah kaedah tanpa sekatan yang menghalang kebuluran benang dan membolehkan penggunaan sumber yang lebih cekap.
Perbandingan sampel kod:
Blok kod berikut menggambarkan perbezaan ini:
<code class="language-csharp">Task[] tasks = new Task[3]; ... // Task.WaitAll(): 阻塞式等待 Task.WaitAll(tasks); // Task.WhenAll(): 异步等待 await Task.WhenAll(tasks);</code>
Dalam kes pertama, Task.WaitAll()
akan menjeda urutan semasa sehingga ketiga-tiga tugasan selesai. Dalam kes kedua, Task.WhenAll()
akan mencipta tugasan yang menunggu tiga tugasan untuk diselesaikan secara tidak segerak. Oleh itu, kaedah anda boleh meneruskan pelaksanaan tanpa menyekat kerana proses menunggu.
Atas ialah kandungan terperinci Task.waitall () vs Task.Whenall (): Menyekat vs. Asynchronous menunggu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!