我必须每天在太平洋时间午夜执行工作。我正在使用带有Quartz.NET库的MVC3。
这是我的代码:
public static void ConfigureQuartzJobs()
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
DateTime dateInDestinationTimeZone = System.TimeZoneInfo
.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, System.TimeZoneInfo.Utc.Id, "Pacific Standard Time").Date;
IJobDetail job = JobBuilder.Create<TimeJob>()
.WithIdentity("job1", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(dateInDestinationTimeZone)
.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
.Build();
sched.ScheduleJob(job, trigger);
sched.Start();
}
此代码仅在第一个午夜(在太平洋时间)运行此作业一次。我已经设置.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
,但它不起作用 - 工作不是每天都在重复。
我可以做些什么让它每天都有效?
任何帮助非常感谢!
答案 0 :(得分:4)
您的计划任务是否由Web应用程序托管?如果是这样,您可能会遇到此类问题。 Web应用程序不适合运行计划任务。您应该创建承载计划任务的Windows服务。
但也有一些事情可以检查:
有些文章解释了在Web应用程序中托管计划任务的优缺点,即。这一个:http://www.foliotek.com/devblog/running-a-scheduled-task/。
答案 1 :(得分:0)
此答案已在7年前提出,并且已经被接受。但是我认为在过去的7年中有一些变化,所以我建议通过 CronScheduleBuilder 此解决方案。
//Constructing job trigger.
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("Test")
.WithSchedule(CronScheduleBuilder
.DailyAtHourAndMinute(16,40))
.WithSimpleSchedule(x=>x.WithIntervalInMinutes(number)
.WithRepeatCount(number)
.Build();
此代码每天在特定时间(例如16:40)触发作业。间隔为 number 次,并重复计数为 number 次