0

我有一个多线程应用程序,我希望能够使用计时器定期检查是否所有线程都已完成,然后再启动一个新线程,即:

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 吗?另外,我想做这个定期检查的函数形式是静态的。任何帮助,将不胜感激。

4

2 回答 2

1

使用Task而不是Thread. 然后,您可以创建一个组合任务:

Task[] tasks = ...; //You provide this
Task combined = Task.WhenAll(tasks);

现在您可以检查是否完成:combined.IsCompleted. 你也可以Waitawait那个任务。

Thread是一个遗留 API,很少使用它。

于 2016-04-29T13:31:47.997 回答
0

@usr 的基于任务的方法是最好的,但是如果您必须依赖线程,那么我建议在每个线程完成时调用一个从Threads集合中删除线程的方法。然后,您在计时器回调中所要做的就是检查集合的计数。不建议依赖 ThreadState 。

于 2016-05-02T21:47:26.413 回答