【问题标题】:Thread Pool and .IsBackground in .NET.NET 中的线程池和 .IsBackground
【发布时间】:2011-04-08 11:53:23
【问题描述】:

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

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

“池线程始终是后台线程。” (C# 中的线程,约瑟夫·阿尔巴哈里)

我可以通过设置轻松使工作线程非后台

Thread.CurrentThread.IsBackground = false;

应用程序将一直等待,直到线程完成。

这有什么问题?

【问题讨论】:

    标签: c# .net multithreading threadpool


    【解决方案1】:

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

    出于同样的原因,您不会为借来的汽车重新粉刷。其他线程属性(如优先级和 MTA)也是如此。

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

    【讨论】:

      【解决方案2】:

      线程什么时候结束?你的方法什么时候结束?我非常怀疑情况是否如此。线程池的全部意义在于,一旦你的线程完成,它就会被放回池中以供重用。现在您已经释放了一个线程,它又回到了线程池中并且您的应用程序仍在运行,因为它是一个前台线程。没有办法让那个线程回来杀死它。

      【讨论】:

      • 谢谢。我理解将池线程设为非背景所导致的问题。我的观点是为什么框架不允许以更明显的方式这样做?老实说,我预计会有一个例外。无论如何,谢谢。
      【解决方案3】:

      线程池线程是后台线程

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多