【问题标题】:c# - ThreadAbortException rethrowingc# - ThreadAbortException 重新抛出
【发布时间】:2013-08-20 08:34:59
【问题描述】:

MSDN 说,对于Thread.Abort 方法-

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

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

【问题讨论】:

  • 为什么不写一段代码试试看呢?

标签: c# multithreading threadabortexception


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2011-03-09
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多