Task.WaitAll บล็อกเธรดปัจจุบันจนกว่างานอื่น ๆ ทั้งหมดจะเสร็จสิ้น
Task.WhenAll เมธอดใช้เพื่อสร้างงานที่จะเสร็จสมบูรณ์ก็ต่อเมื่องานอื่น ๆ ทั้งหมดเสร็จสิ้น ในตัวอย่างที่ 1 เราจะเห็นว่าเมื่อใช้ Task.WhenAll งานเสร็จสมบูรณ์ก่อนอื่นงานจะเสร็จสมบูรณ์ ซึ่งหมายความว่า Task.WhenAll ไม่ได้บล็อกการดำเนินการ และในตัวอย่างที่ 2 เราจะเห็นว่าเมื่อใช้ Task.WaitAll งานเสร็จสมบูรณ์จะถูกดำเนินการหลังจากงานอื่น ๆ ทั้งหมดเสร็จสิ้นเท่านั้น ซึ่งหมายความว่า Task.WaitAll จะบล็อกการดำเนินการ
ตัวอย่าง
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