Wie führe ich mehrere asynchrone Aufgaben in C# aus und warte, bis sie alle abgeschlossen sind?

PHPz
Freigeben: 2023-08-27 11:17:07
nach vorne
1432 Leute haben es durchsucht

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

Task.WaitAll blockiert den aktuellen Thread, bis die Ausführung aller anderen Aufgaben abgeschlossen ist. Mit der Methode

Task.WhenAll wird eine Aufgabe erstellt, die genau dann abgeschlossen wird, wenn alle anderen Aufgaben abgeschlossen sind. Im ersten Beispiel können wir sehen, dass bei Verwendung von Task.WhenAll der Aufgabenabschluss erfolgt, bevor andere Aufgaben abgeschlossen werden. Dies bedeutet, dass Task.WhenAll die Ausführung nicht blockiert. Im zweiten Beispiel können wir sehen, dass bei Verwendung von Task.WaitAll der Aufgabenabschluss erst dann ausgeführt wird, wenn alle anderen Aufgaben abgeschlossen sind. Das bedeutet, dass Task.WaitAll die Ausführung blockiert.

Beispiel

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();
}
Nach dem Login kopieren

Ausgabe

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
Nach dem Login kopieren

Beispiel

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();
}
Nach dem Login kopieren

Ausgabe

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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie führe ich mehrere asynchrone Aufgaben in C# aus und warte, bis sie alle abgeschlossen sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage