Ati*_*ziz 6 .net multithreading asynchronous task-parallel-library cancellation-token
为什么以下甚至合法?
CancellationToken.None.Register(delegate { });
Run Code Online (Sandbox Code Playgroud)
例如,为什么Register不在这里抛出异常?是因为上述等于NOP?
背景:提出这个问题的原因是要了解接受a的方法是否CancellationToken需要在CancellationToken.None涉及注册时进行防御性编码.
Ree*_*sey 12
CancellationToken.None不是空引用,而是空取消令牌.因此,它确实有一个实例.注册永远不会触发,因为源将永远不会注册被取消,但它将"正常"进行注册.
但是,我仍会对此进行防御性检查和编码,除非您小心处理取消正确返回的CancellationTokenRegistration.
编辑:
经过进一步调查,如果您注册CancellationToken.None,您实际上将无所作为,并且CancellationTokenRegistration退回的将不需要处理.这不会保留对您的对象或委托的引用,也不会形成泄漏,因此对于实际目的而言,它是无操作的.这应该是安全的,并且不应该要求防御性做法以避免你的结果.
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |