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

本文关键字:进程 ThreadAbortException 为什么 | 更新日期: 2023-09-27 18:32:29

我们都知道,在 c# 中,如果抛出任何异常,它会立即终止或终止进程,ThreadAbortException的情况并非如此.为什么此异常有特殊行为?

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

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

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

请参见 ThreadAbortException 类。

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