.NET中的线程池和.IsBackground

MSDN以及许多其他来源声称线程池中的工作线程始终是后台。

“线程池线程是后台线程。” (MSDN)

“汇集的线程总是后台线程。” (在C#中穿线,Joseph Albahari)

我可以通过设置轻松地使工作线程非背景

Thread.CurrentThread.IsBackground = false; 

应用程序将等待线程完成。

这有什么问题?

线程什么时候完成? 当你的方法结束? 我非常怀疑是这样的。 线程池的重点是,一旦你的线程完成,它就会被放回池中以便重用。 现在你已经放弃了一个线程,它又回到了线程池中,你的应用程序仍在运行,因为它是一个前台线程。 没有办法让该线程退出来杀死它。

是的,你可以改变它们。 但你不应该

出于同样的原因,你不要重新绘制借来的汽车。 与优先级和MTA等其他线程属性相同。

如果您想要一种不同类型的线程,请创建自己的线程。

线程池线程是后台线程

用“他们将IsBackground属性初始化为True来完成该句子,与使用Thread类创建的线程不同。”

将其设置为false可能有点冒险。 线程池线程被回收,我不太确定该属性将被重新初始化。 它不是与物理操作系统线程关联的属性,它们没有IsBackground行为,它由CLR放在它周围的包装器添加。 所以可能是的。 没理由搞乱它。