线程中止异常重新引发
本文关键字:新引发 异常 线程 | 更新日期: 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
{
}