我见过一些例子,它们的线程过程如下所示。
private void ThreadProc()
{
while (serviceStarted)
{
// do some work
Thread.Sleep(new TimeSpan(0, 0, 5));
}
Thread.CurrentThread.Abort();
}Abort()到底有必要吗?
有许多反对调用Abort()的参数
Abort()会引发异常,这通常比退出过程要耗费更多的资源。我想读一篇解释,为什么这是一个好的做法,或不是。
发布于 2008-11-26 19:14:25
调用Thread.Abort()确实会引发异常,如果您编写的代码将被重用(或基础库的一部分),其他开发人员很难处理ThreadAbortExcpetion的代码。
本文对可靠性最佳做法进行了解释。
我一直听说,调用Thread.Join()是一种更好的方法,如果您可以等到线程完成处理的话。
我不知道有没有人认为这是个好做法。它可能导致死锁(因为当您抛出异常时,非托管资源没有被正确清理)。
这里是另一篇关于它的文章,以及处理这个问题的其他方法。
发布于 2008-11-26 22:29:05
一旦循环退出,线程将自行终止。不需要中止线程。
CurrentThread.Abort不仅是多余的,而且是真正有害的,因为它会引发ThreadAbortException。如果另一个线程尝试Join()您的服务循环线程,它将不必要地处理异常。你最好的选择就是删除CurrentThread.Abort()行。
发布于 2008-11-26 19:16:42
在自己的线程上调用Abort()是安全的,但除此之外,通常应该避免使用它,因为您无法确定其他线程是否会优雅地终止。在许多情况下,您不需要中止线程。只要让它完成,它就会被回收。
https://stackoverflow.com/questions/321779
复制相似问题