Heim >Backend-Entwicklung >C#.Net-Tutorial >Wie führe ich mehrere asynchrone Aufgaben in C# aus und warte, bis sie alle abgeschlossen sind?

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

PHPz
PHPznach vorne
2023-08-27 11:17:071456Durchsuche

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

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

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

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen