0

5个不相关的类实例执行Task.Run()来启动1-4个“执行任务”的实例。每个任务都有一个CancellationToken。让另一个对象停止所有这些产生的任务而不接触/影响它们的产卵物体的方式是一种很酷或者聪明的方式?如果这是.NET 2.0的日子,我可能会在另一个AppDomain中启动一些东西,然后杀死AppDomain来停止子项工作或类似的东西。我还想到,子Task可能会检查一个定时器间隔的静态类,以查看它是否应该停止,但如果可能的话,我想让责任远离产生的任务。.NET 4.5.1跟踪取消所有任务?

+0

为什么不在一个取消标记上运行它们? – TomTom

回答

1

如果可能和/或适用,请对每项任务使用相同的CancellationToken,并且只需通过CancellationTokenSource请求取消。如果每个任务都有自己的CancellationToken支持个别消除,你可以使用下面的策略来代替:

  1. 创建CancellationTokenSource例如,您可以使用发出取消请求的所有任务。
  2. 当你开始你的任务时,开始每一个CancellationTokenSource.CreateLinkedTokenSource,为你提供一个CancellationToken,一旦任何输入被取消就进入取消状态。

这使您可以保留原始单个取消支持以及使用CancellationTokenSource进行全局取消。