首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >去CurrentThread.Abort还是不去CurrentThread.Abort

去CurrentThread.Abort还是不去CurrentThread.Abort
EN

Stack Overflow用户
提问于 2008-11-26 19:03:14
回答 5查看 20.1K关注 0票数 14

我见过一些例子,它们的线程过程如下所示。

代码语言:javascript
复制
    private void ThreadProc()
    {
        while (serviceStarted)
        {
            // do some work

            Thread.Sleep(new TimeSpan(0, 0, 5));
        }

        Thread.CurrentThread.Abort();
    }

Abort()到底有必要吗?

有许多反对调用Abort()的参数

  1. 一旦程序退出,预计它已经清理完毕。
  2. 调用Abort()会引发异常,这通常比退出过程要耗费更多的资源。

我想读一篇解释,为什么这是一个好的做法,或不是。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-26 19:14:25

调用Thread.Abort()确实会引发异常,如果您编写的代码将被重用(或基础库的一部分),其他开发人员很难处理ThreadAbortExcpetion的代码。

本文对可靠性最佳做法进行了解释。

我一直听说,调用Thread.Join()是一种更好的方法,如果您可以等到线程完成处理的话。

我不知道有没有人认为这是个好做法。它可能导致死锁(因为当您抛出异常时,非托管资源没有被正确清理)。

这里是另一篇关于它的文章,以及处理这个问题的其他方法。

票数 5
EN

Stack Overflow用户

发布于 2008-11-26 22:29:05

一旦循环退出,线程将自行终止。不需要中止线程。

CurrentThread.Abort不仅是多余的,而且是真正有害的,因为它会引发ThreadAbortException。如果另一个线程尝试Join()您的服务循环线程,它将不必要地处理异常。你最好的选择就是删除CurrentThread.Abort()行。

票数 3
EN

Stack Overflow用户

发布于 2008-11-26 19:16:42

在自己的线程上调用Abort()是安全的,但除此之外,通常应该避免使用它,因为您无法确定其他线程是否会优雅地终止。在许多情况下,您不需要中止线程。只要让它完成,它就会被回收。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/321779

复制
相关文章

相似问题

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