CancellationTokenSource
类是可丢弃的。在Reflector中快速查看可以证明KernelEvent
的使用,这是一个(很可能)非托管资源。
由于CancellationTokenSource
没有终结器,如果我们不释放它,GC将不会这样做
另一方面,如果您查看MSDN文章托管线程中的取消中列出的示例,就会发现只有一个代码片段处理了令牌。
在代码中处理它的正确方法是什么?
using
开始你的并行任务。只有在您不等待的情况下才可以取消。Dispose
调用在任务上添加ContinueWith
,但这是正确的方法吗?.ForAll(x => Console.Write(x))
?因为它没有类似Reset
方法来清理IsCancelRequested
和Token
字段,我认为它是不可重用的,因此每次你开始一个任务(或PLINQ查询),你应该创建一个新的。这是真的吗?如果是,我的问题是在那些许多CancellationTokenSource
实例上处理Dispose
的正确和推荐策略是什么?