Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Task.WhenAll (IEnumerable<Task>)

.NET Framework (current version)
 

Data di pubblicazione: ottobre 2016

Crea un'attività che verrà completata in seguito al completamento di tutti gli oggetti Task di una raccolta enumerabile.

Spazio dei nomi:   System.Threading.Tasks
Assembly:  mscorlib (in mscorlib.dll)

public static Task WhenAll(
	IEnumerable<Task> tasks
)

Parametri

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

Attività in attesa del completamento.

Valore restituito

Type: System.Threading.Tasks.Task

Attività che rappresenta il completamento di tutte le attività fornite.

Exception Condition
ArgumentNullException

Il valore dell'argomento tasks è null.

ArgumentException

La raccolta tasks contiene un'attività null.

Gli overload di WhenAll metodo che restituisce un Task oggetto sono in genere chiamato quando si è interessati nello stato di un set di attività o le eccezioni generate da un set di attività.

System_CAPS_noteNota

La chiamata a WhenAll(IEnumerable<Task>) metodo non blocca il thread chiamante.

Se una delle attività fornite completata con uno stato di errore, l'attività restituita verrà completata anche un TaskStatus.Faulted stato, in cui le eccezioni conterrà l'aggregazione del set di eccezioni annullato il wrapping da ognuna delle attività fornite.

Se nessuna delle attività fornite con errori, ma almeno uno di essi è stato annullato, l'attività restituita scadrà tra il TaskStatus.Canceled dello stato.

Se nessuna delle attività non riuscite e nessuna delle attività sono stata annullata, l'attività risultante verrà inclusi il TaskStatus.RanToCompletion dello stato.

Se fornito matrice/enumerabile non contiene attività, l'attività restituita immediatamente passerà a un TaskStatus.RanToCompletion stato prima che venga restituito al chiamante.

Nell'esempio seguente crea un set di attività che esegue il ping gli URL in una matrice. Le attività vengono archiviate un List<Task> insieme passato per il WhenAll(IEnumerable<Task>) metodo. Dopo la chiamata al Wait metodo assicura che tutti i thread è sono completata, l'esempio esamina la Task.Status proprietà per determinare se le attività sono con errori.

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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 4.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: