3

En l'absence de construction d'un banc d'essai rapide; J'ai pensé que je demanderais rapidement à SO de voir si quelqu'un connaît cette réponse.CancellationToken - Gestionnaire de registre après annulation demandée

De plus, il pourrait avoir l'avantage supplémentaire d'informer les autres utilisateurs qui peuvent rencontrer des situations similaires ..

Disons que j'ai CancellationTokenSource longtemps vécu avec beaucoup de différents composants enregistrement des gestionnaires sur la CancellationToken.

Si l'annulation est demandée et que les rappels enregistrés sont invoqués, un autre gestionnaire est ensuite enregistré; est-ce que le rappel d'annulation est toujours activé pour ce nouveau rappel au point d'enregistrement?

Bravo à l'avance!

Répondre

7

Jetez un oeil à la documentation CancellationToken.Register:

Si ce jeton est déjà dans l'état annulé, le délégué sera exécuter immédiatement et se synchroniquement. Toute exception générée par le délégué sera générée à partir de cet appel de méthode.

Le contexte ExecutionContext actuel, s'il existe, sera capturé avec le délégué et sera utilisé lors de son exécution.

Considérez ce qui suit:

void RegisterBeforeCancel(CancellationToken token) 
{ 
    token.Register(() => Console.WriteLine("Before cancel")); 
} 

void RegisterAfterCancel(CancellationToken token) 
{ 
    token.Register(() => Console.WriteLine("After cancel")); 
} 

var cts = new CancellationTokenSource(); 

RegisterBeforeCancel(cts.Token); 

cts.Cancel(); 

RegisterAfterCancel(cts.Token); 

La sortie affiche:

Before cancel 
After cancel 
Questions connexes