Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menjalankan pelbagai tugas tak segerak dalam C# dan tunggu semuanya selesai?

Bagaimana untuk menjalankan pelbagai tugas tak segerak dalam C# dan tunggu semuanya selesai?

PHPz
PHPzke hadapan
2023-08-27 11:17:071359semak imbas

如何在 C# 中运行多个异步任务并等待它们全部完成?

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.

Contoh

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();
}

Output

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

Contoh

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();
}

Output

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam