一尘不染

使用Thread.Abort()有什么问题

c#

所以我知道你不应该使用

Thread.Abort()

但是我从来没有得到很好的解释。是否有性能损失或一些隐患?

我知道您不能忽略/吞咽ThreadAbortException(这很有意义)


阅读 445

收藏
2020-05-19

共1个答案

一尘不染

除了这里所有其他好的答案之外,让我补充一点,我们无法保证对Thread.Abort的调用实际上会永远终止所讨论的线程。有可能(尽管不是特别容易)“加固”线程以防线程中止。例如,如果您因为认为线程正在运行恶意代码而中止了线程,那么恶意代码可能会抵制自己的破坏。

如果您有一个长期运行的涉及您不拥有的代码的操作,必须将其彻底删除,那么正确的方法是将该代码放入自己的 进程中
,而不是放在自己的线程中。(最好是在该过程中受高度安全性限制的应用程序域中。)然后,您可以清除该过程。

简而言之,Thread.Abort最多表示不良设计,可能不可靠,并且非常危险。应不惜一切代价避免这种情况;您甚至应该考虑中止线程的唯一一次尝试是在某种“紧急关闭”代码中,在该代码中,您尝试尽可能彻底地拆除应用程序域。

2020-05-19