2014-01-17 92 views
2

会发生什么,如果出于某种原因线程死亡或者如果我手动调用“中止”上一个线程池线程? .NET会重新创建一个新的槽来填充它的槽,否则最终会导致线程池完全耗尽线程?如果一个ThreadPool线程死亡会发生什么?

也许这是一个单独的问题,但确实线程池处理僵尸进程? 如果我排队,在这一段时间(true)循环任务的线程池,将它永远自旋或将线程池最终杀死这个线程?

所以,真正的问题可能是,如果一个作业永远不会在.NET线程池中完成,会发生什么情况。 不知何故照顾?

+2

为什么你会使用'Thread.Abort()'?干净*退出线程池方法* ... –

+0

我知道,我只是想知道实际上会发生什么 –

+0

它被埋在一堆玫瑰之下。 – Mehrdad

回答

2

.NET线程池使用hill-climbing算法来估计在任何时间点应该处于活动状态的工作线程的最佳数量。如果你杀死了这样一个工作者线程,那么下一个检查就会重新创建一个新线程。

至于你的第二个问题:一个非终止任务将被允许无限期地运行。但是,工作线程被认为是background threads;所以一旦你的前台线程退出,你的进程也将退出(杀死后台线程)。

相关问题