【问题标题】:Foreground and background threads前台和后台线程
【发布时间】:2021-08-23 19:57:34
【问题描述】:

我是 Stack Overflow 的新手。在这里查找了很多东西,但今天注册了。刚开始学习多线程课程。

我无法理解何时使用前台和后台线程。我对线程有点陌生。它们之间的优缺点是什么?设置属性时应该考虑什么?

对我来说,使用后台似乎很方便,因为这意味着我不必在关闭应用程序期间处理线程,对吧?我的老师告诉我,大部分时间都使用前台线程,但至少没有以我理解的方式解释原因。

我能得到任何关于什么时候使用前台线程和什么时候使用后台线程的好例子吗?

我看到 C# 标准库默认将 Thread 类构造函数创建的线程设置为前台。而 ThreadPool 默认为背景。这是什么原因?他们为什么要这样写库? (我知道属性是可以更改的,我只是想知道它们为什么默认是这样的)。

【问题讨论】:

  • 非常很少。它只是帮助 CLR 弄清楚当你的程序的主线程结束时它需要做什么。它查看其他正在运行的线程,如果其中一个线程具有 Background = false ,那么它会保持您的程序运行。直到一个都没有了。就这样。当您不关心线程被粗鲁地中止时,您使用 Background = true ,因为它没有做其他线程可能关心的任何重要事情。比如说,一个运行 dbase 查询以更新 UI 的工作线程。没有更多的 UI 线程 => 你不在乎。
  • 正是我想确定的。谢谢。

标签: c# multithreading


【解决方案1】:

我不是 .Net 专家,但这里是 official documentation 关于背景属性:

后台线程与前台线程相同,只是后台线程不会阻止进程终止。一旦属于一个进程的所有前台线程都已终止,公共语言运行时就会结束该进程。任何剩余的后台线程都将停止并且不会完成。

对于线程池的情况,我们可以假设线程池只管理子系统“活动”,而其他“主”(前台)线程正在生活以管理更高级别(即系统)的“活动”。随着系统级线程的存在,它会阻止进程停止。虽然线程池任务通常不足以强制进程生存。

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多