c#-螺纹异常回缩

c#-螺纹异常回缩,c#,multithreading,threadabortexception,C#,Multithreading,Threadabortexception,MSDN说,对于线程.Abort方法- 在线程上调用此方法时,系统会在线程中抛出ThreadAbortException以中止它。ThreadAbortException是一种特殊的异常,应用程序代码可以捕获该异常,但除非调用ResetAbort,否则会在catch块的末尾重新抛出该异常。ResetAbort取消中止请求,并防止ThreadAbortException终止线程。未执行的finally块在线程中止之前执行 因此,异常只会从最直接的catch块抛出一次,还是从所有封装的catch块抛

MSDN说,对于
线程.Abort
方法-

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

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

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

是的,很明显,
ThreadAbortException
将在任何
尝试结束时自动重新引发。。。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
{
}

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