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.Run méthode (Action, CancellationToken)

.NET Framework (current version)
 

Date de publication : novembre 2016

Met en file d'attente le travail spécifié à exécuter dans le pool de threads et retourne un objet Task qui représente ce travail. Un jeton d’annulation permet l’annulation du travail.

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

public static Task Run(
	Action action,
	CancellationToken cancellationToken
)

Paramètres

action
Type: System.Action

Travail à exécuter de façon asynchrone

cancellationToken
Type: System.Threading.CancellationToken

Jeton d’annulation qui peut être utilisé pour annuler le travail.

Valeur de retour

Type: System.Threading.Tasks.Task

Tâche qui représente le travail mis en file d’attente à exécuter dans le pool de threads.

Exception Condition
ArgumentNullException

La valeur du paramètre action était null.

TaskCanceledException

La tâche a été annulée.

ObjectDisposedException

La CancellationTokenSource associée au cancellationToken a été supprimée.

Si l’annulation est demandée avant le début de la tâche d’exécution, la tâche ne s’exécute pas. Au lieu de cela, elle est définie sur la Canceled état et lève un TaskCanceledException exception.

Le Run(Action, CancellationToken) méthode constitue une alternative plus simple à la TaskFactory.StartNew(Action, CancellationToken) (méthode). Il crée une tâche avec les valeurs par défaut suivantes :

Pour plus d'informations sur la gestion des exceptions levées par des opérations de la tâche, consultez la page Gestion des exceptions (bibliothèque parallèle de tâches).

L’exemple suivant appelle la Run(Action, CancellationToken) méthode pour créer une tâche qui parcourt les fichiers dans le répertoire C:\Windows\System32. L’expression lambda appelle la Parallel.ForEach<TSource> pour ajouter des informations sur chaque fichier à un List<T> objet. Chaque détachée tâche imbriquée appelée par le Parallel.ForEach<TSource> boucle vérifie l’état du jeton d’annulation et, si l’annulation est demandée, appelle le CancellationToken.ThrowIfCancellationRequested (méthode). Le CancellationToken.ThrowIfCancellationRequested méthode lève une exception une OperationCanceledException exception est gérée dans un catch bloquer lorsque le thread appelant appelle la Task.Wait méthode.

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

public class Example
{
   public static void Main()
   {
      var tokenSource = new CancellationTokenSource();
      var token = tokenSource.Token;
      var files = new List<Tuple<string, string, long, DateTime>>();

      var t = Task.Run( () => { string dir = "C:\\Windows\\System32\\";
                                object obj = new Object();
                                if (Directory.Exists(dir)) {
                                   Parallel.ForEach(Directory.GetFiles(dir),
                                   f => {
                                           if (token.IsCancellationRequested)
                                              token.ThrowIfCancellationRequested();
                                           var fi = new FileInfo(f);
                                           lock(obj) {
                                              files.Add(Tuple.Create(fi.Name, fi.DirectoryName, fi.Length, fi.LastWriteTimeUtc));          
                                           }
                                      });
                                 }
                              }
                        , token);
      tokenSource.Cancel();
      try {
         t.Wait(); 
         Console.WriteLine("Retrieved information for {0} files.", files.Count);
      }
      catch (AggregateException e) {
         Console.WriteLine("Exception messages:");
         foreach (var ie in e.InnerExceptions)
            Console.WriteLine("   {0}: {1}", ie.GetType().Name, ie.Message);

         Console.WriteLine("\nTask status: {0}", t.Status);       
      }
      finally {
         tokenSource.Dispose();
      }
   }
}
// The example displays the following output:
//       Exception messages:
//          TaskCanceledException: A task was canceled.
//       
//       Task status: Canceled

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: