Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Task.WaitAll, méthode (Task[])

Attend la fin de l'exécution de tous les objets Task fournis.

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

public static void WaitAll(
	params Task[] tasks
)

Paramètres

tasks
Type : System.Threading.Tasks.Task[]
Tableau d'instances de Task sur lesquelles attendre.

ExceptionCondition
ObjectDisposedException

Un ou plusieurs objets Task de tasks ont été supprimés.

ArgumentNullException

L'argument tasks a la valeur null.

ou

L'argument tasks contient un élément Null.

AggregateException

Au moins une des instances Task a été annulée ou une exception a été levée pendant l'exécution d'au moins une des instances Task. Si une tâche a été annulée, AggregateException contient une OperationCanceledException dans sa collection InnerExceptions.

L'exemple suivant montre l'utilisation de WaitAll pour attendre la fin d'un ensemble de tâches.


using System;
using System.Threading;
using System.Threading.Tasks;

class WaitAllDemo
{
    // Demonstrated features:
    // 		Task.Factory
    //		Task.Result
    //		Exception handling
    // Expected results:
    // 		10 tasks are started, each passed an index as a state object.
    //		The tasks that receive an argument between 2 and 5 throw exceptions.
    //		Task.WaitAll() wraps all exceptions in an AggregateException and propagates it to the main thread.
    // Documentation:
    //		http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory_members(VS.100).aspx
    static void Main()
    {
        // Define a delegate that prints and returns the system tick count
        Func<object, int> action = (object obj) =>
        {
            int i = (int)obj;

            // Make each thread sleep a different time in order to return a different tick count
            Thread.Sleep(i * 100);

            // The tasks that receive an argument between 2 and 5 throw exceptions
            if (2 <= i && i <= 5)
            {
                throw new InvalidOperationException("SIMULATED EXCEPTION");
            }

            int tickCount = Environment.TickCount;
            Console.WriteLine("Task={0}, i={1}, TickCount={2}, Thread={3}", Task.CurrentId, i, tickCount, Thread.CurrentThread.ManagedThreadId);

            return tickCount;
        };

        const int n = 10;

        // Construct started tasks
        Task<int>[] tasks = new Task<int>[n];
        for (int i = 0; i < n; i++)
        {
            tasks[i] = Task<int>.Factory.StartNew(action, i);
        }

        // Exceptions thrown by tasks will be propagated to the main thread
        // while it waits for the tasks. The actual exceptions will be wrapped in AggregateException.
        try
        {
            // Wait for all the tasks to finish.
            Task.WaitAll(tasks);

            // We should never get to this point
            Console.WriteLine("WaitAll() has not thrown exceptions. THIS WAS NOT EXPECTED.");
        }
        catch (AggregateException e)
        {
            Console.WriteLine("\nThe following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)");
            for (int j = 0; j < e.InnerExceptions.Count; j++)
            {
                Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
            }
        }
    }

}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Pris en charge dans : 4

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft