如何安排批处理作业在特定时间点运行?

时间:2016-03-04 11:42:14

标签: c# asp.net scheduled-tasks batch-processing job-scheduling

在C#/ asp.net应用程序中,我搜索一种方法来安排在特定时间点执行一次的作业。例如。在2016年2月4日02:00。那就是:

  1. 是否有任何可以执行此操作的框架(在特定时间点安排作业执行)?我从IBM了解Tivoli Workload Scheduler,但这看起来相当陈旧且昂贵。

  2. 如果框架附带一个Web仪表板,允许作业管理员管理(计划和概述)作业,我可以查看一些日历,这样会很好。

3 个答案:

答案 0 :(得分:3)

Hangfire通过将DateTime值传递到计划方法,完全符合您的要求:

BackgroundJob.Schedule(yourMethodCall, new DateTime(2015, 03, 07, 12, 00, 00))

也有一个不错的网络前端:)

答案 1 :(得分:0)

如果您想在c#中安排作业,请查看http://www.quartz-scheduler.net/

答案 2 :(得分:0)

如果您在基于Windows的服务器上运行,则可以使用Revalee开源项目来解决此问题。 Revalee作为Windows服务运行,将所有计划任务存储在持久数据存储中(特别是可扩展存储引擎(ESE)[又名.JET蓝]),这样即使整个服务器需要,也不会丢失状态重新启动。当您的任务到期时,Revalee会调用您的应用程序,以便触发您需要运行的任何任务。

例如,在C#ASP.NET应用程序中,您可以像这样注册Revalee回调(在安装和配置Revalee.Client包之后):

private void ScheduleSendMessage()
{
   // The callback time will be 4 Feb 2016 2:00 UTC (example assumes UTC)
   DateTimeOffset callbackTime = new DateTimeOffset(2016, 2, 4, 2, 0, 0, 0, TimeSpan.Zero);
   // The callback url is set (your send message code will reside there)
   Uri callbackUrl = new Uri("http://mywebapp.com/SendMessage.aspx");
   // Register the callback request with the Revalee service
   RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
}