Task.WaitAll menyekat urutan semasa sehingga semua tugasan lain selesai dilaksanakan. Kaedah
Task.WhenAll digunakan untuk mencipta tugasan yang akan selesai jika dan hanya jika semua tugasan lain selesai. Dalam contoh pertama, kita dapat melihat bahawa apabila menggunakan Task.WhenAll, penyiapan tugasan dilaksanakan sebelum tugasan lain selesai. Ini bermakna Task.WhenAll tidak akan menyekat pelaksanaan. Dalam contoh kedua, kita dapat melihat bahawa apabila menggunakan Task.WaitAll, penyiapan tugas hanya dilaksanakan selepas semua tugasan lain selesai. Ini bermakna Task.WaitAll menyekat pelaksanaan.
static void Main(string[] args){ Task task1 = new Task(() =>{ for (var i = 0; i < 5; i++){ Console.WriteLine("Task 1 - iteration {0}", i); Task.Delay(1000); } Console.WriteLine("Task 1 complete"); }); Task task2 = new Task(() =>{ for (var i = 0; i < 5; i++){ Console.WriteLine("Task 2 - iteration {0}", i); Task.Delay(1000); } Console.WriteLine("Task 2 complete"); }); task1.Start(); task2.Start(); Console.WriteLine("Waiting for tasks to complete."); Task.WhenAll(task1, task2); Console.WriteLine("Both Tasks Completed."); Console.ReadLine(); }
Waiting for tasks to complete. Both Tasks Completed. Task 1 - iteration 0 Task 2 - iteration 0 Task 2 - iteration 1 Task 2 - iteration 2 Task 2 - iteration 3 Task 1 - iteration 1 Task 1 - iteration 2 Task 1 - iteration 3 Task 1 - iteration 4 Task 1 complete Task 2 - iteration 4 Task 2 complete
static void Main(string[] args){ Task task1 = new Task(() =>{ for (var i = 0; i < 5; i++){ Console.WriteLine("Task 1 - iteration {0}", i); Task.Delay(1000); } Console.WriteLine("Task 1 complete"); }); Task task2 = new Task(() =>{ for (var i = 0; i < 5; i++){ Console.WriteLine("Task 2 - iteration {0}", i); Task.Delay(1000); } Console.WriteLine("Task 2 complete"); }); task1.Start(); task2.Start(); Console.WriteLine("Waiting for tasks to complete."); Task.WaitAll(task1, task2); Console.WriteLine("Both Tasks Completed."); Console.ReadLine(); }
Waiting for tasks to complete. Task 1 - iteration 0 Task 2 - iteration 0 Task 1 - iteration 1 Task 1 - iteration 2 Task 1 - iteration 3 Task 1 - iteration 4 Task 1 complete Task 2 - iteration 1 Task 2 - iteration 2 Task 2 - iteration 3 Task 2 - iteration 4 Task 2 complete Both Tasks Completed
Atas ialah kandungan terperinci Bagaimana untuk menjalankan pelbagai tugas tak segerak dalam C# dan tunggu semuanya selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!