跟踪所有要取消的任务

本文关键字:任务 取消 跟踪 | 更新日期: 2023-09-27 17:49:38

5个不相关的类实例执行Task.Run()启动1-4个"做事情"的实例。每个Task都有一个CancellationToken。什么是一个很酷或聪明的方法,让另一个对象停止所有这些衍生任务,而不触及/影响他们的衍生对象?如果现在是。net 2.0时代,我可能会在另一个AppDomain中开始工作,然后杀死AppDomain以停止子工作,或者类似的事情。它也发生在我,子任务可能会检查一个静态类的定时器间隔,看看它是否应该停止,但我想保持责任的衍生任务,如果可能的话。

跟踪所有要取消的任务

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

  1. 创建一个CancellationTokenSource实例,可以用来向所有任务发出取消请求
  2. 当你开始你的任务时,用一个CancellationTokenSource.CreateLinkedTokenSource来启动每个任务,一旦任何输入被取消,CancellationToken就会进入取消状态。

这允许您保留原始的单个取消支持,并使用CancellationTokenSource进行全局取消。