使用下面文章中的代码,我实现了一个自己的线程池:http: //www.developer.com/net/article.php/3783756
这就是我想要实现的目标:通过计时器触发,服务应每 5 秒查询一次数据库以执行新作业。Job 基本上只是有关需要使用参数运行的命令行程序的信息。
最多可以同时执行 50 个或更多这些程序。一个程序可以运行几秒钟、几分钟甚至几小时。服务需要始终控制这些程序,例如,它必须能够根据请求终止程序。
使用上面的 ThreadPool 实现,我开始对要执行的程序进行排队,并可以看到服务何时确实执行了它们。到目前为止没有问题。然而,这里的机制是这样工作的:
ThreadPool 创建一个工作线程并启动它。每当程序排队时,工作线程都会注意到这一点并调用一个委托,该委托实质上实例化了一个 System.Diagnostics.Process 对象并启动外部程序。然后线程完成了它的工作并且能够启动更多的程序。但是...当没有程序要启动时,空闲计时器会使线程管理器杀死线程,从而中断已启动的进程。
这不是我需要的。这里有人知道如何更好地处理我描述的场景吗?