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 constructeur (Action, CancellationToken)

 

Date de publication : novembre 2016

Initialise un nouveau Task avec l'action spécifiée et CancellationToken.

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

public Task(
	Action action,
	CancellationToken cancellationToken
)

Paramètres

action
Type: System.Action

Délégué qui représente le code à exécuter dans la tâche.

cancellationToken
Type: System.Threading.CancellationToken

Le CancellationToken que la nouvelle tâche observera.

Exception Condition
ObjectDisposedException

Le CancellationToken fourni a déjà été supprimé.

ArgumentNullException

L’argument action a la valeur null.

Au lieu d’appeler ce constructeur, la méthode la plus courante pour instancier un Task objet et lancez une tâche est en appelant la méthode statique Task.Run(Action, CancellationToken) et TaskFactory.StartNew(Action, CancellationToken) méthodes. Le seul avantage offert par ce constructeur est qu’il permet l’instanciation d’objet d’être séparé de l’appel de la tâche.

Pour plus d’informations, consultez parallélisme des tâches (Task Parallel Library) et l’annulation dans les Threads managés.

L’exemple suivant appelle la Task(Action, CancellationToken) constructeur 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. Le Start méthode est ensuite appelée pour démarrer la tâche.

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 = new Task(() => { 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);
      t.Start();
      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.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 5.0
Silverlight pour Windows Phone
Disponible depuis 8.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: