gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:10:34 25 4
gpt4 key购买 nike

我有以下多线程程序:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com