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