0

我们都知道,在c#中,如果有任何异常被抛出,它会立即终止或杀死进程,而ThreadAbortException对于这个异常却不是这样。为什么这个异常会有特殊的行为呢?

4

2 回答 2

2

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

当调用 Abort 方法来销毁线程时,公共语言运行时会引发 ThreadAbortException。ThreadAbortException 是一个可以被捕获的特殊异常,但它会在 catch 块结束时自动再次引发。当引发此异常时,运行时会在结束线程之前执行所有 finally 块。因为线程可以在 finally 块中进行无限计算或调用 Thread.ResetAbort 来取消中止,所以不能保证线程将永远结束。如果要等到中止的线程结束,可以调用 Thread.Join 方法。Join 是一个阻塞调用,直到线程真正停止执行才返回。

请参阅ThreadAbortException 类

于 2012-04-29T00:03:33.293 回答
1

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

于 2012-04-29T01:24:05.843 回答