ThrowIfCancellationRequested()vs Abort()

时间:2016-02-26 13:14:21

标签: c# multithreading task-parallel-library

我想要实现的目标是什么?

  

我正在尝试使用CancellationToken从另一个任务中取消长时间运行的任务。我不可能处理取消并投入长时间运行的任务,因为它永远不会触及处理取消的代码(任务处理一个错误的正则表达式模式,无论如何这都不重要)。我尝试从另一个Task中处理并轮询取消请求,当我调用ThrowIfCancellationRequested()时,它实际上会抛出该线程。因此,长期运行的任务仍然存在并且悬而未决。

我是如何解决这个问题的

  

我没有使用令牌的ThrowIfCancellationRequested(),而是在长时间运行的任务的线程上调用了Abort(),它就像魅力一样。

我的问题是:我很确定它不是很优雅,我想知道我在那里做的是否合适以及我怎样才能处理这种情况?< / p>

1 个答案:

答案 0 :(得分:3)

Thread.Abort is evil因为它非常危险。在.NET(以及我所知道的任何其他平台)中的取消是合作的。要么根据需要取消动作,要么将其隔离,以便你可以忽略它。