一些控制台.控制台应用程序中缺少WriteLine文本



我有一个简单的控制台应用程序做Console.WriteLine。问题是,当我执行程序时,它没有将一些文本写入控制台。(计时器#1:少了10秒)

如果我增加i

for (int i = 0; i < 100000; i++)
{
Console.WriteLine(mainThread.Name);
}

如果我将i设置为1000或更小的值,它会将所有内容写入控制台。这是我的代码。

using FightClub.MultiThreading;
Thread mainThread = Thread.CurrentThread;
mainThread.Name = "Main Thread";
Thread thread1 = new Thread(() => CountUp());
Thread thread2 = new Thread(() => CountDown());
thread1.Start();
thread2.Start();
for (int i = 0; i < 100000; i++)
{
Console.WriteLine(mainThread.Name);
}
static void CountDown()
{
for (int i = 10; i >= 0; i--)
{
Console.WriteLine("Timer #1 : " + i + " seconds");
Thread.Sleep(1000);
}
Console.WriteLine("Timer #1 is complete!");
}
static void CountUp()
{
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("Timer #2 : " + i + " seconds");
Thread.Sleep(1000);
}
Console.WriteLine("Timer #2 is complete!");
}

我已经尝试将线程优先级设置为高,但没有任何改变。

虽然你当然可以手动处理线程,除非你有明确的理由,为什么不简化你的代码并使用任务来代替(如果你感兴趣,这里是之前的任务与线程的讨论)任务和线程之间的区别是什么?现在,您的代码读起来更清晰了(可能取决于个人偏好),修复了竞争条件,并且摆脱了Thread。睡眠会引起其他头痛:为什么是线程?睡眠如此有害

List<Task> taskList = new()
{
CountDown(),
CountUp(),
};
await Task.WhenAll(taskList);
static async Task CountDown()
{
for (int i = 10; i >= 0; i--)
{
Console.WriteLine("Timer #1 : " + i + " seconds");
await Task.Delay(TimeSpan.FromSeconds(1));
}
Console.WriteLine("Timer #1 is complete!");
}
static async Task CountUp()
{
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("Timer #2 : " + i + " seconds");
await Task.Delay(TimeSpan.FromSeconds(1));
}
Console.WriteLine("Timer #2 is complete!");
}

最新更新