Je commence une tâche, qui démarre d'autres tâches et ainsi de suite.
Étant donné cet arbre, si une tâche échoue, le résultat de toute l'opération est inutile. J'envisage d'utiliser des jetons d'annulation. À ma grande surprise, le jeton n'a pas de méthode "CancelThisToken ()" ...
Donc ma question est: comment puis-je, en possession de [~ # ~] seulement [~ # ~] a CancellationToken , annule ça?
Comme l'indiquent les documents, vous devez appeler la méthode d'annulation à partir de l'objet source. Un exemple de code est inclus dans le lien que vous avez fourni. Voici les sections pertinentes:
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
previouslyProvidedToken = source.Token;
...
source.Cancel();
https://msdn.Microsoft.com/en-us/library/system.threading.cancellationtoken (v = vs.110) .aspx
comment puis-je, en possession d'un SEUL CancellationToken, l'annuler?
Sans référence à la source, vous ne pouvez pas annuler un jeton. Cela ne signifie pas que vous avez besoin du CancellationTokenSource qui a généré le premier le jeton. Lorsque vous recevez un jeton, vous pouvez créer une nouvelle instance de source de jeton attribuer son jeton au jeton fourni et l'annuler. Toutes les autres parties qui peuvent lire ce jeton verront que son annulation a été demandée.
Comme extension des réponses fournies jusqu'à présent, si vous voulez avoir à la fois une instance de CancellationToken
fournie à vos méthodes, et annulez en interne , vous devez examiner CancellationTokenSource.CreateLinkedTokenSource
. En substance, cela annulera soit lorsque cts.Cancel()
est appelée, soit l'un de ses jetons fournis.
Générez des instances CancellationToken à partir d'une instance CancellationTokenSource et appelez Cancel sur l'instance CTS.
Exemple: https://msdn.Microsoft.com/en-us/library/dd321955 (v = vs.110) .aspx
Il existe également un moyen d'annuler gracieusement les threads sans qu'ils ne déclenchent d'exceptions, vérifiez simplement le CT pour IsCancellationRequested et gérez le cas vous-même. Plus d'informations: tilisation de la propriété IsCancellationRequested?