为什么抛出ThreadAbortException不会杀死进程?

时间:2012-04-28 23:58:03

标签: c# .net exception-handling

我们都知道在c#中如果抛出任何异常,它会立即终止或终止进程, ThreadAbortException不是这种情况。为什么这个例外有特殊行为?

2 个答案:

答案 0 :(得分:2)

因为主线程可以选择取消异常和/或等待线程完成然后继续处理。

  

当调用Abort方法来销毁一个线程时,   公共语言运行库抛出ThreadAbortException。   ThreadAbortException是一个可以捕获的特殊异常,但它   将在catch块结束时再次自动引发。什么时候   引发此异常,运行时执行所有finally块   在结束线程之前。因为线程可以做无界限   在finally块中计算或调用Thread.ResetAbort来取消   中止,无法保证线程永远不会结束。如果你   想要等到中止的线程结束,你可以调用   Thread.Join方法。加入是一个阻止调用,直到没有返回   线程实际上停止执行。

请参阅ThreadAbortException Class

答案 1 :(得分:1)

这是因为ThreadAbortException应该只终止抛出它的线程。但是可能还有另一个线程仍在运行,因此在所有前台线程退出之前,进程不会退出。