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.

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top