Pemahaman mendalam tentang Task.WaitAll dan Task.WhenAll
Dalam pengaturcaraan tak segerak, pembangun selalunya perlu memilih antara Task.WaitAll
dan Task.WhenAll
. Kedua-dua kaedah ini masing-masing mempunyai ciri dan senario yang boleh digunakan.
Tugas.Tunggu Semua
Task.WaitAll
ialah kaedah menyekat yang menjeda pelaksanaan urutan semasa sehingga semua tugasan yang ditentukan selesai. Ini bermakna apabila menggunakan Task.WaitAll
, kod dan operasi lain mesti menunggu tugasan selesai sebelum meneruskan. Ia sangat berguna dalam senario di mana tingkah laku disegerakkan diperlukan.
Task.WhenAll
Task.WhenAll
ialah kaedah tidak menyekat. Apabila dipanggil, ia mengembalikan tugasan yang mewakili penyiapan semua tugas yang ditentukan. Ini membolehkan kod terus dilaksanakan semasa tugasan masih berjalan. Setelah semua tugasan selesai, anda boleh menunggu tugasan yang dikembalikan untuk mendapatkan keputusan.
Contoh Kod
Coretan kod berikut menggambarkan perbezaan antara Task.WaitAll
dan Task.WhenAll
:
Gunakan Task.WaitAll kaedah menyekat:
Task task1 = Task.Run(() => { /* 任务 1 */ }); Task task2 = Task.Run(() => { /* 任务 2 */ }); Task.WaitAll(task1, task2); // 代码在两个任务都完成后继续执行
Cara tidak menyekat menggunakan Task.WhenAll:
Task task1 = Task.Run(() => { /* 任务 1 */ }); Task task2 = Task.Run(() => { /* 任务 2 */ }); Task whenAllTask = Task.WhenAll(task1, task2); await whenAllTask; // 代码在 whenAllTask 完成后继续执行
Dalam contoh pertama, Task.WaitAll
menyekat urutan semasa sehingga task1
dan task2
selesai. Dalam contoh kedua, Task.WhenAll
mengembalikan tugasan (whenAllTask
) yang mewakili penyiapan dua tugasan. Ini membolehkan kod untuk melaksanakan secara tak segerak semasa tugasan masih berjalan. Setelah kedua-dua tugas selesai, kod menggunakan await
untuk menunggu whenAllTask
selesai.
Pilih kaedah yang sesuai
PilihanTask.WaitAll
dan Task.WhenAll
bergantung pada keperluan khusus aplikasi. Task.WaitAll
sesuai apabila tingkah laku disegerakkan diperlukan. Task.WhenAll
adalah lebih baik apabila pelaksanaan tak segerak diperlukan, membolehkan aplikasi meneruskan tugasan lain sementara menunggu tugasan yang ditentukan selesai.
Atas ialah kandungan terperinci Task.WaitAll vs. Task.WhenAll: Bilakah Saya Perlu Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!