Rumah > pembangunan bahagian belakang > Tutorial C#.Net > 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
Lepaskan: 2023-08-27 11:17:07
ke hadapan
1455 orang telah melayarinya

如何在 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();
}
Salin selepas log masuk

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
Salin selepas log masuk

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();
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan