0

5 个不相关的类实例执行 Task.Run() 以启动 1-4 个“做事”的实例。每个任务都有一个 CancellationToken。让另一个对象停止所有这些生成的任务而不接触/影响它们的生成对象的酷或聪明的方法是什么?如果这是 .NET 2.0 天,我可能会在另一个 AppDomain 中启动事情,然后终止 AppDomain 以停止子工作,或类似的事情。我还想到子任务可能会在 Timer 间隔上检查静态类以查看它是否应该停止,但如果可能的话,我希望将责任排除在生成的任务之外。

4

1 回答 1

1

如果可能和/或适用,CancellationToken对每个任务使用相同的,只需通过CancellationTokenSource. 如果每个任务都有自己CancellationToken的支持单独取消,则可以改用以下策略:

  1. 创建一个CancellationTokenSource实例,您可以使用该实例向所有任务发出取消请求。
  2. 当您开始您的任务时,每个任务都以 a 开始CancellationTokenSource.CreateLinkedTokenSource,它会在任何输入被取消后立即为您提供CancellationToken进入取消状态的 a。

这使您可以保留原始的个人取消支持以及将 aCancellationTokenSource用于全局取消。

于 2014-03-12T13:23:54.887 回答