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 méthode (Task[])

.NET Framework (current version)
 

Date de publication : novembre 2016

Crée une tâche qui s'achève quand tous les objets Task d'un tableau sont terminés.

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

public static Task WhenAll(
	params Task[] tasks
)

Paramètres

tasks
Type: System.Threading.Tasks.Task[]

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

Valeur de retour

Type: System.Threading.Tasks.Task

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

Exception Condition
ArgumentNullException

L’argument tasks avait la valeur null.

ArgumentException

Le tableau tasks contenait une tâche null.

Les surcharges de la WhenAll méthode qui retourne un Task objet sont généralement appelées lorsque vous intéresse dans l’état d’un ensemble de tâches ou les exceptions levées par un ensemble de tâches.

System_CAPS_noteRemarque

L’appel à WhenAll(Task[]) méthode ne bloque pas 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.

Si le fourni tableau/énumérable ne contient aucune tâche, la tâche retournée passe immédiatement à un TaskStatus.RanToCompletion état avant d’être retournée à l’appelant.

L’exemple suivant crée un ensemble de tâches de test ping de l’URL dans un tableau. Les tâches sont stockées dans un List<Task> collection qui est convertie en un tableau et passée à la WhenAll(IEnumerable<Task>) (méthode). Après l’appel à la Wait méthode garantit que tous les threads terminés, l’exemple examine la Task.Status propriété pour déterminer si toutes les tâches ont généré une erreur.

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

public class Example
{
   public static void Main()
   {
      int failed = 0;
      var tasks = new List<Task>();
      String[] urls = { "www.adatum.com", "www.cohovineyard.com",
                        "www.cohowinery.com", "www.northwindtraders.com",
                        "www.contoso.com" };

      foreach (var value in urls) {
         var url = value;
         tasks.Add(Task.Run( () => { var png = new Ping();
                                     try {
                                        var reply = png.Send(url);
                                        if (! (reply.Status == IPStatus.Success)) {
                                           Interlocked.Increment(ref failed);
                                           throw new TimeoutException("Unable to reach " + url + ".");
                                        }
                                     }
                                     catch (PingException) {
                                        Interlocked.Increment(ref failed);
                                        throw;
                                     }
                                   }));
      }
      Task t = Task.WhenAll(tasks.ToArray());
      try {
         t.Wait();
      }
      catch {}   

      if (t.Status == TaskStatus.RanToCompletion)
         Console.WriteLine("All ping attempts succeeded.");
      else if (t.Status == TaskStatus.Faulted)
         Console.WriteLine("{0} ping attempts failed", failed);      
   }
}
// The example displays output like the following:
//       5 ping attempts failed

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: