【发布时间】:2015-07-11 04:43:58
【问题描述】:
一些序言: 我有一个 Windows 服务,它每十秒触发一次计时器(尽管在 app.config 中可配置)。当计时器触发一个事件时,事件处理程序会创建一个对象的实例(我们称之为 Executor),它会做一些工作。 Executor 对象创建后台线程来执行从数据库获得的任务队列。 大多数情况下,Executor 的线程会在大约 60 秒内完成,因此在任何时候都有 6 个或更多的 Executor 对象实例,它们都在做一些工作(这是轻量级的工作,但可以长时间运行,因为它获取并等待东西 - 一段时间后,如果仍未完成,它会放弃。
如果服务被要求停止,我不想留下这些后台线程,在某些情况下,我可能想让 Executor 对象在关闭之前完成。
是否有可能在 OnStop() 方法中获取 Executor 对象的实例集合,并检查每个实例的属性,然后从那里做出决定?
我目前的想法是,每次实例化 Executor 时,我都会将其添加到集合中(并在完成后删除每个实例),然后在停止时查阅该集合。看起来很干净,但我想知道是否有更“流畅”的方式?
我知道我也懒得理会,只需使用RequestAdditionalTime 来涵盖我认为让这一切完成的最长时间,但我不想假设永远不会有未来的缓慢问题或更大的任务。
【问题讨论】:
标签: c# .net multithreading windows-services