.NET中的线程池和.IsBackground

时间:2010-09-05 17:01:02

标签: c# .net multithreading threadpool

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

  

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

     

“汇总线程始终是后台线程。” (穿着C#,Joseph Albahari)

我可以通过设置

轻松地使工作线程非背景
Thread.CurrentThread.IsBackground = false;

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

这有什么问题?

3 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

  

线程池线程是后台线程

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

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