CancellationTokenSource.Cancel Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Communique une demande d’annulation.
Surcharges
| Nom | Description |
|---|---|
| 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. |
Cancel()
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
Communique une demande d’annulation.
public:
void Cancel();
public void Cancel();
member this.Cancel : unit -> unit
Public Sub Cancel ()
Exceptions
Cela CancellationTokenSource a été supprimé.
Exception d’agrégation contenant toutes les exceptions levées par les rappels inscrits sur l’associé CancellationToken.
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 TaskFactory.ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) méthode 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’a pas été annulée, l’appel à la TaskFactory.ContinueWhenAll méthode lève une exception.
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.
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Public Sub Main()
' Define the cancellation token.
Dim source As New CancellationTokenSource()
Dim token As CancellationToken = source.Token
Dim lockObj As New Object()
Dim rnd As New Random
Dim tasks As New List(Of Task(Of Integer()))
Dim factory As New TaskFactory(token)
For taskCtr As Integer = 0 To 10
Dim iteration As Integer = taskCtr + 1
tasks.Add(factory.StartNew(Function()
Dim value, values(9) As Integer
For ctr As Integer = 1 To 10
SyncLock lockObj
value = rnd.Next(0,101)
End SyncLock
If value = 0 Then
source.Cancel
Console.WriteLine("Cancelling at task {0}", iteration)
Exit For
End If
values(ctr-1) = value
Next
Return values
End Function, token))
Next
Try
Dim fTask As Task(Of Double) = factory.ContinueWhenAll(tasks.ToArray(),
Function(results)
Console.WriteLine("Calculating overall mean...")
Dim sum As Long
Dim n As Integer
For Each t In results
For Each r In t.Result
sum += r
n+= 1
Next
Next
Return sum/n
End Function, token)
Console.WriteLine("The mean is {0}.", fTask.Result)
Catch ae As AggregateException
For Each e In ae.InnerExceptions
If TypeOf e Is TaskCanceledException
Console.WriteLine("Unable to compute mean: {0}",
CType(e, TaskCanceledException).Message)
Else
Console.WriteLine("Exception: " + e.GetType().Name)
End If
Next
Finally
source.Dispose()
End Try
End Sub
End Module
' 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
L’associé CancellationToken est averti de l’annulation et passe à un état où IsCancellationRequested retourne true.
Tous les rappels ou opérations annulables inscrites auprès de l’instance CancellationToken sont exécutés, s’ils n’ont pas déjà été exécutés par un appel précédent à Cancel(). Les appels suivants ne Cancel() réexécutent pas le même rappel, sauf s’ils sont réinscrits. (Évitez plusieurs appels à Cancel(), car l’intention de ce code est souvent mal définie.)
Les rappels sont exécutés de façon synchrone dans l’ordre LIFO.
Nous vous recommandons d’annuler les opérations et rappels inscrits sans CancellationToken lever d’exceptions.
Cette surcharge d’annulation agrège toutes les exceptions levées dans un AggregateExceptionrappel, de sorte qu’un rappel lève une exception n’empêchera pas l’exécution d’autres rappels inscrits.
L’appel de cette méthode a le même effet que l’appel de Cancel(false).
Voir aussi
S’applique à
Cancel(Boolean)
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
- Source:
- CancellationTokenSource.cs
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.
public:
void Cancel(bool throwOnFirstException);
public void Cancel(bool throwOnFirstException);
member this.Cancel : bool -> unit
Public Sub Cancel (throwOnFirstException As Boolean)
Paramètres
- throwOnFirstException
- Boolean
true si les exceptions doivent se propager immédiatement ; sinon, false.
Exceptions
Cela CancellationTokenSource a été supprimé.
Exception d’agrégation contenant toutes les exceptions levées par les rappels inscrits sur l’associé CancellationToken.
Remarques
L’associé CancellationToken est averti de l’annulation et passe à un état où IsCancellationRequested retourne true.
Tous les rappels ou opérations annulables inscrites auprès de l’instance CancellationToken sont exécutés, s’ils n’ont pas déjà été exécutés par un appel précédent à Cancel(). Les appels suivants ne Cancel() réexécutent pas le même rappel, sauf s’ils sont réinscrits. (Évitez plusieurs appels à Cancel(), car l’intention de ce code est souvent mal définie.)
Les rappels sont exécutés de façon synchrone dans l’ordre LIFO.
Nous vous recommandons d’annuler les opérations et rappels inscrits sans CancellationToken lever d’exceptions.
Si throwOnFirstException c’est truele cas, une exception se propage immédiatement hors de l’appel Cancel, empêchant le traitement des rappels restants et des opérations annulables.
Si throwOnFirstException c’est falsele cas, cette surcharge agrège les exceptions levées dans un AggregateException, de sorte qu’un rappel lève une exception n’empêche pas l’exécution d’autres rappels inscrits.