c# - 在这种情况下主线程会发生什么

标签 c# .net multithreading

我有以下多线程程序:

class Program{
  static void main(){
    (new Thread(DoSomething)).Start();
  }
  static void DoSomething(){
    // Dome something here...
  }
}

几个问题:

  1. 子线程退出后主线程是否退出?
  2. 如果确实退出并且子线程是后台线程:主进程是要退出还是等待后台线程完成?

最佳答案

“默认情况下,您显式创建的线程是前台线程。只要其中任何一个正在运行,前台线程就会使应用程序保持事件状态,而后台线程则不会。一旦所有前台线程完成,应用程序就会结束,并且任何仍在运行的后台线程突然终止。

class PriorityTest
{
    static void Main (string[] args)
    {
        Thread worker = new Thread ( () => Console.ReadLine() );
        if (args.Length > 0) worker.IsBackground = true;
        worker.Start();
    }
}

如果调用此程序时不带任何参数,工作线程将处于前台状态并等待 ReadLine 语句以等待用户按 Enter 键。同时,主线程退出,但应用程序继续运行,因为前台线程仍然存在。

但是,如果将参数传递给 Main(),则工作程序将被指定为后台状态,并且程序几乎会在主线程结束时立即退出(终止 ReadLine 和程序)。”

参见 Joseph Albahri's (a genius and great guy) page有关线程的更多信息(这是从中提取的信息)。

关于c# - 在这种情况下主线程会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555948/

相关文章:

c# - 无法让我的网络应用注销 ADFS

c# - 如何在 EF Core 6 中嵌套事务?

c++ - 在 C++ 中读取/写入文件的多线程?

c# - 如何使用 Array.sort 按特定元素对结构数组进行排序

c# - Linq:如何获取二级节点的值

c# - 在 ASP.NET 中使用复选框启用文本框?

c# - XML 数据中的 & 符号不允许加载 xml

linux - 除了内核线程堆栈之外,内核是否有自己的堆栈?

c++ - 尝试使用已删除的函数

c# - 解析时删除 XML 空格和断行