我们都知道在c#中如果抛出任何异常,它会立即终止或终止进程,
ThreadAbortException
不是这种情况。为什么这个例外有特殊行为?
答案 0 :(得分:2)
因为主线程可以选择取消异常和/或等待线程完成然后继续处理。
当调用Abort方法来销毁一个线程时, 公共语言运行库抛出ThreadAbortException。 ThreadAbortException是一个可以捕获的特殊异常,但它 将在catch块结束时再次自动引发。什么时候 引发此异常,运行时执行所有finally块 在结束线程之前。因为线程可以做无界限 在finally块中计算或调用Thread.ResetAbort来取消 中止,无法保证线程永远不会结束。如果你 想要等到中止的线程结束,你可以调用 Thread.Join方法。加入是一个阻止调用,直到没有返回 线程实际上停止执行。
答案 1 :(得分:1)
这是因为ThreadAbortException应该只终止抛出它的线程。但是可能还有另一个线程仍在运行,因此在所有前台线程退出之前,进程不会退出。