.NET中的线程池和.IsBackground

Dmi*_*ezo 7 .net c# multithreading threadpool

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

"线程池线程是后台线程." (MSDN)

"汇集的线程总是后台线程." (在C#中穿线,Joseph Albahari)

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

Thread.CurrentThread.IsBackground = false;
Run Code Online (Sandbox Code Playgroud)

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

这有什么问题?

Hen*_*man 12

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

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

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


Hou*_*ell 6

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


Han*_*ant 5

线程池线程是后台线程

用“与使用 Thread 类创建的线程不同,它们的 IsBackground 属性初始化为 True”来结束这句话。

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