.NET 4.5.1 跟踪所有取消任务?
Posted
技术标签:
【中文标题】.NET 4.5.1 跟踪所有取消任务?【英文标题】:.NET 4.5.1 Track all Tasks for Cancellation? 【发布时间】:2014-03-12 13:19:03 【问题描述】:5 个不相关的类实例执行 Task.Run() 以启动 1-4 个“做事”的实例。每个任务都有一个 CancellationToken。让另一个对象停止所有这些生成的任务而不接触/影响它们的生成对象的酷或聪明的方法是什么?如果这是 .NET 2.0 天,我可能会在另一个 AppDomain 中启动,然后终止 AppDomain 以停止子工作,或类似的东西。我还想到子任务可能会在 Timer 间隔上检查静态类以查看它是否应该停止,但如果可能的话,我希望将责任排除在生成的任务之外。
【问题讨论】:
为什么不在一个取消令牌上运行它们? 【参考方案1】:如果可能和/或适用,请为每个任务使用相同的CancellationToken
,并通过CancellationTokenSource
请求取消。如果每个任务都有自己的CancellationToken
来支持单独取消,你可以改用以下策略:
-
创建一个
CancellationTokenSource
实例,您可以使用该实例向所有任务发出取消请求。
当您开始您的任务时,以CancellationTokenSource.CreateLinkedTokenSource
开始每个任务,它会为您提供一个CancellationToken
,一旦任何输入被取消,该CancellationToken
就会进入取消状态。
这使您可以保留原始的个人取消支持,并使用CancellationTokenSource
进行全局取消。
【讨论】:
以上是关于.NET 4.5.1 跟踪所有取消任务?的主要内容,如果未能解决你的问题,请参考以下文章