在下面的程序中,为什么t.join功能不起作用。它将继续在屏幕上键入字符O,即使我已指定它等待另一个线程完成。
class Program
{
bool done;
static void Main(string[] args)
{
Thread t = new Thread(() => Go('U'));
for (int i = 0; i < 1000; i++)
{
Console.Write('O');
Thread.Sleep(500);
}
t.Start();
t.Join();
Console.WriteLine("Thread t has ended!");
Console.Read();
}
static void Go(char p)
{
for (int i = 0; i < 1000; i++)
{
Console.Write(p);
Thread.Sleep(500);
}
}
}
答案 0 :(得分:2)
你从来没有开始第二个帖子 - 你打印出O
,但你只有在完成第二个帖子后才开始(大约八分钟)。
在循环之前移动t.Start();
,它应该按照您期望的方式工作。
不要用多线程猜测 - 它非常容易让人产生微妙的错误。了解线程是什么,Join
做了什么,以及如何安全地使用多个线程。否则,您将有很多有趣的调试问题几乎无法重现和修复:)