Lire en anglais

Partager via


CancellationTokenSource Classe

Définition

Signale à un CancellationToken qu’il doit être annulé.

C#
public class CancellationTokenSource : IDisposable
C#
[System.Runtime.InteropServices.ComVisible(false)]
public sealed class CancellationTokenSource : IDisposable
C#
[System.Runtime.InteropServices.ComVisible(false)]
public class CancellationTokenSource : IDisposable
Héritage
CancellationTokenSource
Attributs
Implémente

Exemples

L’exemple suivant utilise un générateur de nombres aléatoires pour émuler une application de collecte de données qui lit 10 valeurs intégrales à partir de onze instruments différents. La valeur zéro indique que la mesure a échoué pour un instrument, auquel cas l’opération doit être annulée et aucune moyenne globale ne doit être calculée.

Pour gérer l’annulation possible de l’opération, l’exemple instancie un objet CancellationTokenSource qui génère un jeton d’annulation passé à un objet TaskFactory. L’objet TaskFactory passe à son tour le jeton d’annulation à chacune des tâches responsables de la collecte des lectures pour un instrument particulier. La méthode TaskFactory.ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) est appelée pour s’assurer que la moyenne est calculée uniquement après que toutes les lectures ont été collectées avec succès. Si une tâche n’est pas terminée, car elle a été annulée, l’appel à la méthode TaskFactory.ContinueWhenAll lève une exception.

C#
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      // Define the cancellation token.
      CancellationTokenSource source = new CancellationTokenSource();
      CancellationToken token = source.Token;

      Random rnd = new Random();
      Object lockObj = new Object();
      
      List<Task<int[]>> tasks = new List<Task<int[]>>();
      TaskFactory factory = new TaskFactory(token);
      for (int taskCtr = 0; taskCtr <= 10; taskCtr++) {
         int iteration = taskCtr + 1;
         tasks.Add(factory.StartNew( () => {
           int value;
           int[] values = new int[10];
           for (int ctr = 1; ctr <= 10; ctr++) {
              lock (lockObj) {
                 value = rnd.Next(0,101);
              }
              if (value == 0) { 
                 source.Cancel();
                 Console.WriteLine("Cancelling at task {0}", iteration);
                 break;
              }   
              values[ctr-1] = value; 
           }
           return values;
        }, token));   
      }
      try {
         Task<double> fTask = factory.ContinueWhenAll(tasks.ToArray(), 
         (results) => {
            Console.WriteLine("Calculating overall mean...");
            long sum = 0;
            int n = 0; 
            foreach (var t in results) {
               foreach (var r in t.Result) {
                  sum += r;
                  n++;
               }
            }
            return sum/(double) n;
         } , token);
         Console.WriteLine("The mean is {0}.", fTask.Result);
      }   
      catch (AggregateException ae) {
         foreach (Exception e in ae.InnerExceptions) {
            if (e is TaskCanceledException)
               Console.WriteLine("Unable to compute mean: {0}", 
                  ((TaskCanceledException) e).Message);
            else
               Console.WriteLine("Exception: " + e.GetType().Name);
         }
      }
      finally {
         source.Dispose();
      }
   }
}
// Repeated execution of the example produces output like the following:
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 10
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 5.29545454545455.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 6
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 4.97363636363636.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 4.86545454545455.

Remarques

À compter du .NET Framework 4, .NET Framework utilise un modèle unifié pour l’annulation coopérative d’opérations synchrones asynchrones ou longues qui impliquent deux objets :

Le modèle général d’implémentation du modèle d’annulation coopérative est le suivant :

Pour plus d’informations, consultez Annulation dans les threads managés.

Important

Ce type implémente l’interface IDisposable. Une fois que vous avez fini d’utiliser une instance du type, vous devez la supprimer directement ou indirectement. Pour supprimer le type directement, appelez sa méthode Dispose dans un bloc try/finally. Pour le supprimer indirectement, utilisez une construction de langage telle que using (en C#) ou Using (en Visual Basic). Pour plus d’informations, consultez la section « Utilisation d’un objet implémentant IDisposable » dans la rubrique de l’interface IDisposable.

Constructeurs

CancellationTokenSource()

Initialise une nouvelle instance de la classe CancellationTokenSource.

CancellationTokenSource(Int32)

Initialise une nouvelle instance de la classe CancellationTokenSource qui sera annulée après le délai spécifié en millisecondes.

CancellationTokenSource(TimeSpan, TimeProvider)

Initialise une nouvelle instance de la classe CancellationTokenSource qui sera annulée après la TimeSpanspécifiée.

CancellationTokenSource(TimeSpan)

Initialise une nouvelle instance de la classe CancellationTokenSource qui sera annulée après l’intervalle de temps spécifié.

Propriétés

IsCancellationRequested

Obtient si l’annulation a été demandée pour cette CancellationTokenSource.

Token

Obtient la CancellationToken associée à cette CancellationTokenSource.

Méthodes

Cancel()

Communique une demande d’annulation.

Cancel(Boolean)

Communique une demande d’annulation et spécifie si les rappels restants et les opérations annulables doivent être traités si une exception se produit.

CancelAfter(Int32)

Planifie une opération d’annulation sur cette CancellationTokenSource après le nombre spécifié de millisecondes.

CancelAfter(TimeSpan)

Planifie une opération d’annulation sur cette CancellationTokenSource après l’intervalle de temps spécifié.

CancelAsync()

Communique une demande d’annulation de façon asynchrone.

CreateLinkedTokenSource(CancellationToken, CancellationToken)

Crée une CancellationTokenSource qui sera dans l’état annulé lorsque l’un des jetons sources est à l’état annulé.

CreateLinkedTokenSource(CancellationToken)

Crée une CancellationTokenSource qui sera dans l’état annulé lorsque le jeton fourni est à l’état annulé.

CreateLinkedTokenSource(CancellationToken[])

Crée un CancellationTokenSource qui sera dans l’état annulé lorsque l’un des jetons sources dans le tableau spécifié est à l’état annulé.

CreateLinkedTokenSource(ReadOnlySpan<CancellationToken>)

Crée une CancellationTokenSource qui sera dans l’état annulé lorsque l’un des jetons sources est à l’état annulé.

Dispose()

Libère toutes les ressources utilisées par l’instance actuelle de la classe CancellationTokenSource.

Dispose(Boolean)

Libère les ressources non managées utilisées par la classe CancellationTokenSource et libère éventuellement les ressources managées.

Equals(Object)

Détermine si l’objet spécifié est égal à l’objet actuel.

(Hérité de Object)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l’objet actuel.

(Hérité de Object)
TryReset()

Tente de réinitialiser l'CancellationTokenSource à utiliser pour une opération non liée.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Cohérence de thread

Tous les membres publics et protégés de CancellationTokenSource sont thread-safe et peuvent être utilisés simultanément à partir de plusieurs threads, à l’exception de Dispose(), qui ne doit être utilisé que lorsque toutes les autres opérations sur l’objet CancellationTokenSource ont terminé.

Voir aussi

  • d’annulation
  • d’annulation de tâche