如何在 C# 上正确等待线程数组的结尾?

How correctly wait of ends of thread array on c#?

我需要使用清晰的线程 class(不是 Task 并且没有 async/await)。我如何才能正确等待列表中所有任务的结束?

我想要正确的方法 WaitAll()

例如:

public class TaskManager
{
    private readonly List<Thread> _threads = new List<Thread>();

    public void AddTask([NotNull] Action<int> action, int i)
    {
        var thread = new Thread(() =>
        {
            action(i);
        });
        _threads.Add(thread);
        thread.Start();
    }

    public void WaitAll()
    {
        while (_threads.Any(x => x.ThreadState != ThreadState.Stopped))
        {
        }
    }
}

我质疑 'bare threads' 的必要性,但是当您确定这一点时,在 while 循环中等待就是在浪费 CPU 时间。线程只有 Join() 方法可用:

public void WaitAll()
{
   foreach(var thread in _threads)    
     thread.Join();
}