我有一个多线程应用程序,我希望能够使用计时器在开始新线程之前定期检查所有线程是否已完成,即:
var checkStatusTimer = new System.Threading.Timer(new TimerCallback(CheckThreads), null, 10000, 10000);
这就是我来的。需要在CheckThreads方法中检查它们是否已完成?我正在考虑一个函数的东西,它检查它们:
foreach (Thread thread in Threads)
{
Thread t = thread;
if (t.ThreadState != ThreadState.Stopped)
return false;
}
我是否在正确的轨道上?这是正确的方法吗?或者我应该使用System.Timers.Timer?另外,我想要进行定期检查的函数形式是静态的。任何帮助,将不胜感激。
答案 0 :(得分:1)
使用Task
代替Thread
。然后,您可以创建组合任务:
Task[] tasks = ...; //You provide this
Task combined = Task.WhenAll(tasks);
现在您可以检查完成情况:combined.IsCompleted
。您还可以Wait
和await
完成该任务。
Thread
是一种遗留API,很少使用它。
答案 1 :(得分:0)
@ usr的基于任务的方法是最好的,但是如果你必须依赖线程,那么我建议当每个线程完成时,它会调用一个从Threads
集合中删除线程的方法。然后,您在计时器回调中所要做的就是检查集合的计数。依赖ThreadState is not advisable。