ThrowIfCancellationRequested() vs Abort()

本文关键字:Abort vs ThrowIfCancellationRequested | 更新日期: 2023-09-27 18:36:26

我想实现什么?

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

我是如何解决这个问题的

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

我的问题是:我很确定它不是很优雅,我想知道我在那里所做的事情是否可以,我还能如何处理这种情况?

ThrowIfCancellationRequested() vs Abort()

Thread.Abort是邪恶的,因为它非常危险。在 .NET(以及我知道的任何其他平台)中取消是合作的。要么按需取消操作,要么将其隔离,以便您可以忽略它。