如何在Quartz.net的同一时间每天开始工作?

Mar*_*rta 6 c# scheduling quartz.net asp.net-mvc-3

我必须每天在太平洋时间午夜执行工作.我正在使用带有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();
}
Run Code Online (Sandbox Code Playgroud)

此代码使此作业仅在第一个午夜(太平洋时间)运行一次.我已经在那里设置.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())但它不起作用 - 工作不是每天都在重复.

我能做些什么让它每天都能运作?

任何帮助非常感谢!

emp*_*mpi 4

您的计划任务是否由 Web 应用程序托管?如果是这样,您可能会遇到此类问题。Web 应用程序不适合运行计划任务。您应该创建托管计划任务的 Windows 服务。

但您还可以检查一些事项:

  1. 尝试使用较短的时间(即,如果将间隔设置为 1 分钟,请检查这是否有效)。
  2. 尝试CronTrigger - 我在 Windows 服务中使用它,它工作正常。

有一些文章解释了在 Web 应用程序中托管计划任务的优点和缺点,即。这一个: http: //www.foliotek.com/devblog/running-a-scheduled-task/