首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# - ThreadAbortException重投

c# - ThreadAbortException重投
EN

Stack Overflow用户
提问于 2013-08-20 08:34:59
回答 1查看 748关注 0票数 0

MSDN说,对于Thread.Abort方法-

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-20 08:43:23

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

是的,很明显,ThreadAbortException将在拦截它的线程中的任何try... catch块的末尾自动重新引发,否则它将毫无意义。如果ThreadAbortException只有两个“生命”,那又有什么用呢?

这是否符合逻辑,可以阻止一个ThreadAbortException

代码语言:javascript
复制
try
{
    try
    {
        // The Thread.Abort "happens" here
        Thread.Sleep(Timeout.Infinite);
    }
    catch
    {
    }
}
catch 
{
}

而这不会吗?

代码语言:javascript
复制
try
{
    // The Thread.Abort "happens" here
    Thread.Sleep(Timeout.Infinite);
}
catch
{
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18330491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档