To CurrentThread.Abort或不是CurrentThread.Abort

Mik*_*els 14 .net c# multithreading

我已经看到了一些具有类似这样的线程过程的示例.

    private void ThreadProc()
    {
        while (serviceStarted)
        {
            // do some work

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

        Thread.CurrentThread.Abort();
    }
Run Code Online (Sandbox Code Playgroud)

最后Abort()真的有必要吗?

反对召唤有很多论据 Abort()

  1. 一旦程序退出 - 预计它已经自行清理.
  2. 调用Abort()抛出异常,这通常比退出过程更耗费资源.

我想解释为什么这是一个好的做法或者不是一个好的做法.

Zac*_*tes 5

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

本文将介绍可靠性最佳实践.

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

我不知道是否有人认为这是一个好习惯.它可能导致死锁(因为抛出异常时未正确清理非托管资源)

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