处理任务计划

时间:2017-08-18 12:49:44

标签: .net sql-server

我正在寻找更多关于概念性想法的讨论,而不是必要的具体细节(尽管具体情况也是受欢迎的)。应用程序环境中的一个常见要求是需要能够按照设定的时间表(每个星期一下午3:00,每个工作日下午6:30,下午2:00,等等)运行特定任务。 / p>

现在,在我的环境中,我已经构建了一个在应用程序服务器上运行的Windows服务来处理这些事件。目前它使用一个每小时过期一次的计时器,并检查是否需要做任何事情。目前,所有这些事件都使用日期/时间/工作日等的硬编码检查来执行其任务。现在,显然,使用每小时运行一次的计时器,我对事件运行的解决方案是从计划到1小时后的任何时间。对于我目前的任务,这很好。

我想要做的是能够处理任意计划的任务,并且能够更准确地按时完成任务。现在,改进的分辨率只是让计时器每分钟到期以检查任务是否需要运行。但是,能够任意安排这些事情的第一个要求有点复杂。

应用程序连接到SQL数据库,前端全部位于基于Web的ASP.Net应用程序中,因此用户界面部分应该不是问题。我想知道以下内容:

我希望至少能够处理SQL Server代理等应用程序允许的复杂性的时间表,即允许具有开始日期和结束日期(或没有结束日期)的重复项目,频率(每日,每周,每月),特定工作日可选择每周安排等等。现在,显然,我可以在数据库表中为每个元素添加一个字段,以及“上次运行时间”和“下次运行”时间“专栏,但这对我来说似乎非常低效。

所以我的具体问题是: 是否存在用于存储计划任务的数据库数据模型设计的最佳实践?

是否有任何现有的.Net库可用于在前端存储这些日程表,然后确定是否该在后端运行特定作业?我当然可以蛮力这个,但似乎是一个普遍的要求,那里应该有一些东西可以做很多繁重的工作而不必“重新创造轮子”。

处理您遇到的这种可能不明显的要求是否存在任何陷阱?

1 个答案:

答案 0 :(得分:0)

只需使用SQL Agent ???或者使用Windows预定任务......同时考虑Hangfire

你从自己写作中获得了什么好处?

这是一个更难的问题,似乎应该利用现有的解决方案。你目前关于每分钟轮询的想法是非常低效的,并且在处理这样的时序时存在许多微妙的错误。只需在控制台应用程序而不是服务中编写作业,然后从现有的调度程序中调用它。如果要保留自定义前端,可以使用SQL Agent / Scheduled Task / Hangfire接口使前端创建作业。

Windows服务更适合一直运行 的事情,而不是按计划运行。

相关问题