.NET 4.5.1跟踪所有取消任务?

时间:2014-03-12 13:19:03

标签: c# multithreading task-parallel-library appdomain cancellation-token

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

1 个答案:

答案 0 :(得分:1)

如果可能和/或适用,请对每项任务使用相同的CancellationToken,并通过CancellationTokenSource请求取消。如果每个任务都有自己的CancellationToken来支持个人取消,则可以改为使用以下策略:

  1. 创建一个CancellationTokenSource实例,您可以使用该实例向所有任务发出取消请求。
  2. 当您开始执行任务时,请使用CancellationTokenSource.CreateLinkedTokenSource启动每个任务,只要取消任何输入,就会为您提供进入取消状态的CancellationToken
  3. 这使您可以保留原始的个人取消支持,并使用CancellationTokenSource进行全局取消。