所以我知道你不应该使用
Thread.Abort()
但是我从来没有得到很好的解释。是否有性能损失或一些隐患?
我知道您不能忽略/吞咽ThreadAbortException(这很有意义)
除了这里所有其他好的答案之外,让我补充一点,我们无法保证对Thread.Abort的调用实际上会永远终止所讨论的线程。有可能(尽管不是特别容易)“加固”线程以防线程中止。例如,如果您因为认为线程正在运行恶意代码而中止了线程,那么恶意代码可能会抵制自己的破坏。
如果您有一个长期运行的涉及您不拥有的代码的操作,必须将其彻底删除,那么正确的方法是将该代码放入自己的 进程中 ,而不是放在自己的线程中。(最好是在该过程中受高度安全性限制的应用程序域中。)然后,您可以清除该过程。
简而言之,Thread.Abort最多表示不良设计,可能不可靠,并且非常危险。应不惜一切代价避免这种情况;您甚至应该考虑中止线程的唯一一次尝试是在某种“紧急关闭”代码中,在该代码中,您尝试尽可能彻底地拆除应用程序域。