1
    protected override void OnStart(String[] args)
    {
        ResultManager.PrepareCache();
        ThreadPool.QueueUserWorkItem(ResultQueue.Process);
        ThreadPool.QueueUserWorkItem(StatusUpdater.UpdateStatus);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RestartHungTests);
        ThreadPool.QueueUserWorkItem(ResultManager.SyncroniseResultsTable);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RecoverLostResults);
        ThreadPool.QueueUserWorkItem(BrowserTestStartInfo.FillQueues);
        ThreadPool.QueueUserWorkItem(MailAppAccount.FillQueues);
    }

这些任务中的每一个都在 Windows 服务的生命周期内运行。对于这种事情,我一直坚持使用 ThreadPool,我应该只是启动普通线程吗?我可以确定 ThreadPool 将有足够的线程来运行每个任务吗?如果我将 MaxThreads 设置为 7,我以后会因为这些线程永不中止而遇到问题吗?将其设置为更高的值是否安全?


编辑:

我总是希望所有 7 个线程同时运行,并且它们永远不会中止——我什至应该使用线程吗?还有其他更适合这种永久运行的任务吗?

每个任务每 x 分钟运行一次特定的方法。

4

2 回答 2

11

这不是对线程池的适当使用。只需创建普通线程,因为它们是长期存在的。创建线程的开销无关紧要,因为您只会创建一次。

于 2009-04-05T21:47:34.440 回答
4

正如约翰所说,这不是一个好主意。原因是线程池的线程数量有限,而您正在使用大量线程并且永远不会返回它们。线程池旨在为短期线程池线程使用。

您实际上不需要管理线程,因为它们存在于应用程序的生命周期中。

于 2009-04-05T21:53:02.493 回答