Maison >développement back-end >Tutoriel C#.Net >Comment exécuter plusieurs tâches asynchrones en C# et attendre qu'elles soient toutes terminées ?

Comment exécuter plusieurs tâches asynchrones en C# et attendre qu'elles soient toutes terminées ?

PHPz
PHPzavant
2023-08-27 11:17:071463parcourir

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

Task.WaitAll bloque le thread actuel jusqu'à ce que toutes les autres tâches aient fini de s'exécuter. La méthode

Task.WhenAll est utilisée pour créer une tâche qui se terminera si et seulement si toutes les autres tâches sont terminées. Dans le premier exemple, nous pouvons voir que lors de l’utilisation de Task.WhenAll, l’achèvement de la tâche se produit avant la fin des autres tâches. Cela signifie que Task.WhenAll ne bloquera pas l'exécution. Dans le deuxième exemple, nous pouvons voir que lors de l'utilisation de Task.WaitAll, l'achèvement de la tâche n'est exécuté qu'une fois toutes les autres tâches terminées. Cela signifie que Task.WaitAll bloque l'exécution.

Exemple

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

Sortie

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

Exemple

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

Sortie

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer