2010-12-23 71 views
2

假设我有一个带有表的数据库,此表中的每个记录都与要执行的操作相对应。这个表格有一个日期时间字段,在该字段中存储下一个动作应该执行的时刻。运行定时任务

此表正在被windows服务读取,并且操作存储在数据结构中。每隔几分钟,服务将读取表格,并将新操作合并到数据结构中,同时创建的操作不会错过。

每个动作都有一定的重复间隔。当某个操作已经运行时,日期时间字段会根据该时间间隔更新到下一个应该运行的时间。

现在,我在这里想知道正确的行动方案:在给定的时间,实际开始行动的首选方式是 ?

假设我有一个应该在09:00在数据结构中运行的操作,我如何确保在09:00触发? 我目前想要的是每分钟检查一次数据结构,比较当前时间和动作的计划时间,如果它们匹配,则执行动作并根据其相关时间间隔更新动作的执行时间。

作为一个数据结构,我倾向于在队列中考虑,所以我可以在前面做下一个工作,而且只需要检查第一个,但是随后我需要在每次发现新操作时重新排列队列。

我的兴趣点主要是检查是否应该执行一个动作,一个合适的数据结构将遵循的好方法。表中的操作数量非常低,不超过25个。我无法控制数据库,因此一切都应在C#中以编程方式完成,以防您不知所措。 任何提示,经验或意见的建议?

+0

你 - 需要 - 一个数据库?谁启动计划任务? – 2010-12-23 15:13:58

+0

取决于系统;在一个数据库(或类似的)你可以坚持系统状态,以防系统崩溃。 – 2010-12-23 15:15:10

+0

是的,需要数据库作为添加新操作等的中心点。当然,这只是系统的一小部分。讨论的唯一问题应该是时间被检查的方式。 – Oxymoron 2010-12-23 15:21:49

回答

1

说粒度是1分钟。我会有一个线程频繁轮询数据库,并在下一分钟更新一系列的事情。一个单独的计时器线程可以在分钟结束时启动该动作列表。

当你进入细节就有点复杂,因为你可能要保持紧缰绳它,以及相关联的状态机(编写,运行,完成等)上。

+0

这是关于我的想法,并想知道这是否是优先选择的方式。 – Oxymoron 2010-12-23 15:19:30

0

SQL Agent似乎是一个不错的选择,但是你不会得到客户端应用程序的反馈。

0

,如果你有一个计时器实例作为数据结构的一部分,并安排它时,这个动作是由于运行一次什么。这样您就不必检查,只要将结构放入队列或列表中,就知道它已计划运行。计时器会触发一个单独的线程,所以你的代码将运行异步到会谈到数据库的一部分...