繁体   English   中英

c# - ThreadAbortException重新抛出

[英]c# - ThreadAbortException rethrowing

MSDN说,对于Thread.Abort方法 -

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

那么异常只会从最直接的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
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM