Est-il sûr de s'inscrire avec l'annulation de l'annulation.
Question
Pourquoi les suivants sont-ils même légaux?
CancellationToken.None.Register(delegate { });
Pourquoi, par exemple, Register
Vous ne lancez pas une exception ici? Est-ce parce que ce qui précède équivaut à un Nop?
Arrière plan: La raison de poser cette question est de comprendre si une méthode acceptant un CancellationToken
doit être codé de manière défensive contre CancellationToken.None
Lorsque l'inscription est impliquée.
La solution
Annulationtoken. n'est pas une référence nul, mais plutôt un jeton d'annulation vide. En tant que tel, il a une instance. L'inscription ne se déclenchera jamais, car la source ne s'inscrira jamais comme étant annulée, mais elle passera par «correctement».
Cependant, je mettrais un chèque et coder de manière défensive contre cela, à moins que vous ne fassiez attention à l'élimination du Annulation d'annulation retourné correctement.
Éditer:
Après une enquête plus approfondie, si vous vous inscrivez contre CancellationToken.None
, vous ne ferez rien à rien, et le CancellationTokenRegistration
retourné ne nécessitera pas d'élimination. Cela ne conservera pas de référence à votre objet ou délégué, et ne formera pas de fuite, c'est donc un non-opération à des fins pratiques. Cela devrait être sûr et ne devrait pas nécessiter de pratiques défensives à éviter de votre côté.