[当我运行以下链接中提供的示例时:https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.isbackground?view=netframework-4.8
class Example
{
static void Main()
{
BackgroundTest shortTest = new BackgroundTest(10);
Thread foregroundThread =
new Thread(new ThreadStart(shortTest.RunLoop));
BackgroundTest longTest = new BackgroundTest(50);
Thread backgroundThread =
new Thread(new ThreadStart(longTest.RunLoop));
backgroundThread.IsBackground = true;
foregroundThread.Start();
backgroundThread.Start();
}
}
根据文档,当前台线程停止时,后台线程应停止。我在计算机上运行此示例,后台线程没有停止,并继续在for循环中打印数字。此外,打印了数字十仅一次,而不是示例中的两倍,因为for循环从0到9运行。这是我从示例中收到的输出,而没有对示例进行任何修改:
是文档错误还是取决于CPU体系结构?
我用不同的CLR尝试过,并且我同时使用.Net Framework和.Net Core-可以正常工作。但是,正如注释部分所述,如果将Console.Readline()
放在Main函数的末尾-它会阻塞主线程,直到您提供输入为止,并且由于您的主线程是前台线程-后台线程仍在继续计数。