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

Posted

技术标签:

【中文标题】.NET 4.5.1 跟踪所有取消任务?【英文标题】:.NET 4.5.1 Track all Tasks for Cancellation? 【发布时间】:2014-03-12 13:19:03 【问题描述】:

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

【问题讨论】:

为什么不在一个取消令牌上运行它们? 【参考方案1】:

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

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

这使您可以保留原始的个人取消支持,并使用CancellationTokenSource 进行全局取消。

【讨论】:

以上是关于.NET 4.5.1 跟踪所有取消任务?的主要内容,如果未能解决你的问题,请参考以下文章

Git取消文件跟踪

git取消文件跟踪

git取消文件跟踪

在 Insights 中看不到任何跟踪或异常

git 取消文件跟踪

celery 任务的实时进度跟踪