前台线程停止时后台线程不会停止吗?

问题描述 投票:0回答:1

[当我运行以下链接中提供的示例时: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运行。这是我从示例中收到的输出,而没有对示例进行任何修改:

https://pastebin.com/AsfEX6gf

是文档错误还是取决于CPU体系结构?

c# multithreading
1个回答
4
投票

我用不同的CLR尝试过,并且我同时使用.Net Framework和.Net Core-可以正常工作。但是,正如注释部分所述,如果将Console.Readline()放在Main函数的末尾-它会阻塞主线程,直到您提供输入为止,并且由于您的主线程是前台线程-后台线程仍在继续计数。

© www.soinside.com 2019 - 2024. All rights reserved.