c# - 这是对 ThreadPool 的适当使用吗?我能确定它会为每个任务启动一个线程吗?

标签 c# .net multithreading windows-services threadpool

    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 分钟运行一个特定的方法。

最佳答案

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

关于c# - 这是对 ThreadPool 的适当使用吗?我能确定它会为每个任务启动一个线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719751/

相关文章:

multithreading - 深度解析CPU和GPU的区别

c# - 使用 Azure ARM 模板和 C# 进行部署时设置调试级别

.net - VS 2005 可以为 .NET 4 构建 C# 吗?

c# - 在 ServiceStack 请求过滤器中解析具有泛型类型的接口(interface)

c# - 对象到字节的转换

c++ - Lock/CriticalSection 与 c++ 中的 volatile 的可见性

multithreading - Asio SSL 流线程安全

c# - Azure 下载 blob 部分

c# - 在 getter 中声明变量

c# - 如何确定 View 模型中的引用类型属性已更改?