Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Task.WhenAll<TResult> méthode (IEnumerable<Task<TResult>>)

.NET Framework (current version)
 

Date de publication : novembre 2016

Crée une tâche qui s'achève quand tous les objets Task<TResult> d'une collection énumérable sont terminés.

Espace de noms:   System.Threading.Tasks
Assembly:  mscorlib (dans mscorlib.dll)

public static Task<TResult[]> WhenAll<TResult>(
	IEnumerable<Task<TResult>> tasks
)

Paramètres

tasks
Type: System.Collections.Generic.IEnumerable<Task<TResult>>

Tâches restantes à exécuter avant la fin.

Valeur de retour

Type: System.Threading.Tasks.Task<TResult[]>

Tâche qui représente l'achèvement de toutes les tâches fournies.

Paramètres de type

TResult

Type de la tâche terminée.

Exception Condition
ArgumentNullException

L’argument tasks avait la valeur null.

ArgumentException

La collection tasks contenait une tâche null.

L’appel à WhenAll<TResult>(IEnumerable<Task<TResult>>) méthode ne bloque pas le thread appelant. Toutefois, un appel à retourné Result propriété ne bloque le thread appelant.

Si une des tâches fournies se termine avec un état d’erreur, la tâche retournée se termine également dans un TaskStatus.Faulted état, où ses exceptions contiendra l’agrégation de l’ensemble des exceptions encapsulées à partir de chacune des tâches fournies.

Si aucune des tâches fournies a généré une erreur, mais au moins un d’eux a été annulé, la tâche retournée se termine par le TaskStatus.Canceled état.

Si aucune des tâches a échoué et aucune des tâches ont été annulées, la tâche obtenue se termine par le TaskStatus.RanToCompletion état. Le Task<TResult>.Result Propriétés de la tâche retournée seront fixée à un tableau contenant tous les résultats des tâches fournies dans le même ordre, telles qu’elles ont été fournies (par exemple, si l’entrée tâches tableau contenu t1, t2, t3, la tâche de sortie Task<TResult>.Result propriété retournera une TResult[]arr[0] == t1.Result, arr[1] == t2.Result, and arr[2] == t3.Result).

Si le tasks argument ne contient aucune tâche, la tâche retournée passe immédiatement à un TaskStatus.RanToCompletion état avant d’être retournée à l’appelant. Retourné TResult[] est un tableau d’éléments de 0.

L’exemple suivant crée dix tâches, chacune d’elles instancie un générateur de nombres aléatoires qui crée les 1 000 nombres aléatoires compris entre 1 et 1 000 et calcule leur moyenne. Le Delay(Int32) méthode permet de retarder l’instanciation de générateurs de nombres aléatoires afin qu’ils ne sont pas créés avec les mêmes valeurs initiales. L’appel à la WhenAll<TResult> méthode retourne ensuite un Int64 tableau qui contient la moyenne calculée par chaque tâche. Ils sont ensuite utilisés pour calculer la moyenne globale.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var tasks = new List<Task<long>>();
      for (int ctr = 1; ctr <= 10; ctr++) {
         int delayInterval = 18 * ctr;
         tasks.Add(Task.Run(async () => { long total = 0;
                                          await Task.Delay(delayInterval);
                                          var rnd = new Random();
                                          // Generate 1,000 random numbers.
                                          for (int n = 1; n <= 1000; n++)
                                             total += rnd.Next(0, 1000);
                                          return total; } ));
      }
      var continuation = Task.WhenAll(tasks);
      try {
         continuation.Wait();
      }
      catch (AggregateException)
      { }

      if (continuation.Status == TaskStatus.RanToCompletion) {
         long grandTotal = 0;
         foreach (var result in continuation.Result) {
            grandTotal += result;
            Console.WriteLine("Mean: {0:N2}, n = 1,000", result/1000.0);
         }

         Console.WriteLine("\nMean of Means: {0:N2}, n = 10,000",
                           grandTotal/10000);
      }
      // Display information on faulted tasks.
      else {
         foreach (var t in tasks) {
            Console.WriteLine("Task {0}: {1}", t.Id, t.Status);
         }
      }
   }
}
// The example displays output like the following:
//       Mean: 506.34, n = 1,000
//       Mean: 504.69, n = 1,000
//       Mean: 489.32, n = 1,000
//       Mean: 505.96, n = 1,000
//       Mean: 515.31, n = 1,000
//       Mean: 499.94, n = 1,000
//       Mean: 496.92, n = 1,000
//       Mean: 508.58, n = 1,000
//       Mean: 494.88, n = 1,000
//       Mean: 493.53, n = 1,000
//
//       Mean of Means: 501.55, n = 10,000

In this case, the ten individual tasks are stored in a T:System.Collections.Generic.List`1 object. T:System.Collections.Generic.List`1 implements the T:System.Collections.Generic.IEnumerable`1 interface.

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 4.5
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight pour Windows Phone
Disponible depuis 8.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: