【问题标题】:Killing a .NET 4 Task?杀死 .NET 4 任务?
【发布时间】:2012-05-25 00:37:17
【问题描述】:

我可以像在SO thread 中讨论的那样使用旧的和危险的Thread.Abort() 一样的方法杀死.NET 4.0 Task object(双关语并拯救小猫!)

肯尼

【问题讨论】:

  • 我知道这很危险,但能做到吗?我猜你说不。
  • @kenny 对Task 有很多了解 - 如果您事先知道正在使用的TaskScheduler 正在使用Task 的专用线程,您可以调用Abort 在那个线程上。话虽如此,以这种方式设计系统是一个非常糟糕的主意。
  • @ReedCopsey 我同意这是糟糕的设计,但它不在我的掌控之中。

标签: .net multithreading task-parallel-library


【解决方案1】:

Task 类旨在使用 .NET 4 的新 Cooperative Cancellation model,而不是依赖于破坏性的“中止”取消样式。

没有直接的方法可以取消Task(比如Thread.Abort(),尽管在任何情况下使用它非常糟糕),但是有一个完整的框架来提供工具到request that the Task cancel itself

【讨论】:

  • 是的,我已经看到 CancelationTokenSource 和协作方法应该如何完成,但是我有一个需要中止任务(与 3rd 方硬件 API 对话)的情况,我是愿意不稳定地去做。再次感谢!。
  • @kenny Task 中没有允许这样做的机制。
  • @kenny, Thread 没有被弃用,只是大多数时候,Tasks 更方便。
  • 可以提供一个任务的 Thread.Abort 作为取消令牌的委托:stackoverflow.com/a/21715122/571637
  • @ReedCopsey 同意,这就是我说“不要这样做”的原因。但是“我可以做到吗?”的答案。是“是”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2019-08-24
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多