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