c# - ThreadAbortException重新抛出

时间:2013-08-20 08:34:59

标签: c# multithreading threadabortexception

MSDN说,对于Thread.Abort方法 -

  

在线程上调用此方法时,系统会在线程中抛出ThreadAbortException以中止它。 ThreadAbortException是一个特殊的异常,可以被应用程序代码捕获,但是在catch块的末尾重新抛出,除非调用ResetAbort。 ResetAbort取消中止请求,并阻止ThreadAbortException终止线程。在线程中止之前执行未执行的finally块。

因此异常只会从最直接的catch块或所有封装catch块中抛出一次? 此外,当执行未执行的finally块时,它是否包括完全未执行和部分执行的块?

1 个答案:

答案 0 :(得分:2)

如果finally块正在执行,并且在堆栈回滚期间需要执行它们,则ThreadAbortException块始终完全受ThreadAbortException保护。

是的,显然try... catch将在截取它的同一个线程中的任何ThreadAbortException块的末尾自动重新引发,否则它将毫无意义。只有两个“生命”的ThreadAbortException有什么用?

这可能会阻止try { try { // The Thread.Abort "happens" here Thread.Sleep(Timeout.Infinite); } catch { } } catch { } 吗?

try
{
    // The Thread.Abort "happens" here
    Thread.Sleep(Timeout.Infinite);
}
catch
{
}

虽然这不会?

{{1}}