2015-07-11 27 views
0

某些序言: 我有一个Windows服务,每10秒钟启动一次定时器(尽管可在app.config中配置)。当计时器触发事件​​时,事件处理程序会创建一个对象的实例(我们称之为执行器),它可以完成一些工作。 Executor对象创建后台线程来执行从DB获取的任务队列。大多数情况下,执行程序的线程在大约60秒内完成,因此在任何时候都有合理的机会,有六个或更多的Executor对象实例,都在做一些工作(这是轻量级的工作,但可以长时间运行,因为它会得到并提取并等待一些东西 - 经过一段时间后,如果还没有完成,它会放弃)。检查可能存在的对象的实例

如果服务被要求停止,我不想离开这些后台线程,并且在某些情况下,我可能希望在关闭之前让Executor对象完成。

在OnStop()方法中,是否有可能获取Executor对象的实例集合,并检查每个对象的属性,然后从那里做出决定?

我目前的想法是,每次我实例化Executor时,我将它添加到集合中(并在完成时删除每个实例),然后在停止时查阅该集合。它似乎很干净,但我想知道是否有更多'流畅'的方式?

我知道我也可以不打扰,只是用RequestAdditionalTime来涵盖我认为最大的时间可以让它完成,但我不想假设从来没有缓慢问题或未来更大的任务。

回答

0

集合是要走的路。添加他们,并在服务结束通过每个并让他们杀死他们各自的任务。