为什么以下甚至是合法的?
CancellationToken.None.Register(delegate { });
为什么,例如,
Register
不在这里抛出异常?是不是因为上面等于 NOP ?背景:问这个问题的原因是要了解一个方法是否接受
CancellationToken
需要针对 CancellationToken.None
进行防御性编码涉及注册时。
最佳答案
CancellationToken.None不是空引用,而是空的取消标记。因此,它确实有一个实例。注册永远不会触发,因为源永远不会注册为被取消,但它会“正确地”通过。
但是,除非您小心处理 CancellationTokenRegistration,否则我仍然会对此进行检查和编码。正确返回。
编辑:
经进一步调查,如果您注册 CancellationToken.None
,你实际上什么都不做,CancellationTokenRegistration
退回将不需要处理。这不会保留对您的对象或委托(delegate)的引用,也不会形成泄漏,因此出于实际目的,它是无操作的。这应该是安全的,并且不应该要求您最终避免采取防御措施。
关于.net - 注册 CancellationToken.None 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5489553/