线程中止异常重新引发

本文关键字:新引发 异常 线程 | 更新日期: 2023-09-27 18:28:27

MSDN说,对于Thread.Abort方法-

在线程

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

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

线程中止异常重新引发

如果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
{
}