5 个不相关的类实例执行 Task.Run() 以启动 1-4 个“做事”的实例。每个任务都有一个 CancellationToken。让另一个对象停止所有这些生成的任务而不接触/影响它们的生成对象的酷或聪明的方法是什么?如果这是 .NET 2.0 天,我可能会在另一个 AppDomain 中启动事情,然后终止 AppDomain 以停止子工作,或类似的事情。我还想到子任务可能会在 Timer 间隔上检查静态类以查看它是否应该停止,但如果可能的话,我希望将责任排除在生成的任务之外。
问问题
229 次
1 回答
1
如果可能和/或适用,CancellationToken
对每个任务使用相同的,只需通过CancellationTokenSource
. 如果每个任务都有自己CancellationToken
的支持单独取消,则可以改用以下策略:
- 创建一个
CancellationTokenSource
实例,您可以使用该实例向所有任务发出取消请求。 - 当您开始您的任务时,每个任务都以 a 开始
CancellationTokenSource.CreateLinkedTokenSource
,它会在任何输入被取消后立即为您提供CancellationToken
进入取消状态的 a。
这使您可以保留原始的个人取消支持以及将 aCancellationTokenSource
用于全局取消。
于 2014-03-12T13:23:54.887 回答