如何在 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();
}
我需要使用清晰的线程 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();
}