如果ThreadPool线程死了怎么办?

时间:2014-01-17 12:26:30

标签: c# multithreading threadpool

如果由于某种原因线程死亡或者我在ThreadPool线程上手动调用“Abort”会发生什么? .NET会重新创建一个新的填充其插槽还是线程池最终会用完线程?

也许这是一个单独的问题,但是线程池处理僵尸进程吗? 如果我将一个带有while(true)循环的任务排队到线程池中,它会永远旋转还是线程池最终会终止这个线程?

所以真正的问题可能是;如果作业永远不会在.NET线程池中完成,会发生什么。 这是以某种方式照顾的吗?

1 个答案:

答案 0 :(得分:2)

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

关于你的第二个问题:一个非终止任务将被允许无限期运行。但是,工作线程被视为background threads;因此,一旦所有前台线程都退出,您的进程也将退出(终止后台线程)。