我有以下多线程程序:
class Program{
static void main(){
(new Thread(DoSomething)).Start();
}
static void DoSomething(){
// Dome something here...
}
}
几个问题:
- 子线程退出后主线程是否退出?
- 如果确实退出并且子线程是后台线程:主进程是要退出还是等待后台线程完成?
最佳答案
“默认情况下,您显式创建的线程是前台线程。只要其中任何一个正在运行,前台线程就会使应用程序保持事件状态,而后台线程则不会。一旦所有前台线程完成,应用程序就会结束,并且任何仍在运行的后台线程突然终止。
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/