在 foreach 循环中的其他线程运行时阻止主线程

本文关键字:线程 运行时 其他 foreach 循环 | 更新日期: 2023-09-27 17:50:32

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

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

在 foreach 循环中的其他线程运行时阻止主线程

您需要

将所有Thread存储在一个List<Thread>中,并在启动所有后创建一个单独的foreach循环来Join()它们。

请注意,您可以通过使用 Task 而不是 Thread 来使代码更简单、更高效,或者更好的是,Parallel.ForEach()