当Foreach循环中的其他线程正在运行时阻止主线程

时间:2013-01-02 21:39:31

标签: c# multithreading

我正在创建一个新线程,在foreach循环的每次迭代期间执行一些代码。这些线程完成后,我希望主线程继续执行,但我不知道如何做到这一点。我不能为每次迭代调用Thread.Join(),因为这将阻止主线程继续foreach循环,直到创建的线程完成。这是代码块,其中testEnvironments是类型字符串List:

        foreach (string s in testEnvironments)
        {
            myThread = new Thread(() => program.KickoffPricing(s));
            myThread.Start();
            Thread.Sleep(1000);
        }

        email.ComposeEmail();

1 个答案:

答案 0 :(得分:4)

您需要将所有Thread存储在List<Thread>中,然后在启动所有foreach之后创建一个Join()循环。

请注意,使用Task代替Thread,或者更好的是Parallel.ForEach(),您可以使代码更简单,更高效。