C#线程程序|关于thread.join

时间:2015-10-02 14:37:20

标签: c# .net multithreading

在下面的程序中,为什么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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

你从来没有开始第二个帖子 - 你打印出O,但你只有在完成第二个帖子后才开始(大约八分钟)。

在循环之前移动t.Start(); ,它应该按照您期望的方式工作。

不要用多线程猜测 - 它非常容易让人产生微妙的错误。了解线程是什么,Join做了什么,以及如何安全地使用多个线程。否则,您将有很多有趣的调试问题几乎无法重现和修复:)