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<TResult>(IEnumerable<Task<TResult>>)

.NET Framework (current version)
 

Data di pubblicazione: ottobre 2016

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

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

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

Parametri

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

Attività in attesa del completamento.

Valore restituito

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

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

Parametri tipo

TResult

Tipo dell'attività completata.

Exception Condition
ArgumentNullException

Il valore dell'argomento tasks è null.

ArgumentException

La raccolta tasks contiene un'attività null.

La chiamata a WhenAll<TResult>(IEnumerable<Task<TResult>>) metodo non blocca il thread chiamante. Tuttavia, una chiamata all'oggetto restituito Result proprietà 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. Il Task<TResult>.Result dell'attività restituita verrà impostata per una matrice contenente tutti i risultati delle attività fornite nello stesso ordine come sono stati forniti (ad esempio, se l'input dell'attività di matrice inclusa t1, t2, t3, l'attività di output Task<TResult>.Result restituirà un TResult[] in arr[0] == t1.Result, arr[1] == t2.Result, and arr[2] == t3.Result).

Se il tasks argomento non contiene attività, l'attività restituita immediatamente passerà a un TaskStatus.RanToCompletion stato prima che venga restituito al chiamante. L'oggetto restituito TResult[] sarà una matrice di elementi di 0.

Nell'esempio seguente crea dieci attività, ognuno dei quali crea un'istanza di un generatore di numeri casuali che crea 1.000 numeri casuali compreso tra 1 e 1000 e calcola la Media. Il Delay(Int32) consente di ritardare la creazione di istanze di generatori di numeri casuali in modo che non vengono creati con valori di inizializzazione identici. La chiamata al WhenAll<TResult> metodo quindi restituisce un Int64 matrice che contiene il valore medio calcolato da ogni attività. Questi vengono quindi utilizzati per calcolare la media 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.

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: