Quartz.net 触发先前计划的作业

本文关键字:计划 作业 net Quartz | 更新日期: 2023-09-27 18:33:02

我刚开始使用 Quartz.net。我写了一个小例程来安排多个作业。我真的不确定我是否正确编码了这个。希望有一些 Quartz.NET 专家可以提供帮助。我有三个问题:

  1. 我的触发器设置看起来是否正确?我想每天上午 9 点和下午 3 点运行一个作业(我知道你看不到 market.LocalOpenTime 属性,但它总是今天的日期是上午 9 点,另一个对象有下午 3 点。

  2. 我注意到当我运行该程序时,它将始终运行 9AM 作业(过去计划)。无论如何,我可以关闭此功能吗?我在下午 1 点运行了该程序。我假设如果我在下午 4 点运行它,它将运行这两个过去的计划作业。

  3. 如何仅在工作日运行这些作业?

    foreach (IJob job in GetJobsToSchedule())
    {
        i++;
        var market = (IMarket)job;
        IJobDetail jobDetail = new JobDetailImpl(market.JobName, null, market.GetType());           
        ITrigger trigger = new SimpleTriggerImpl(market.JobName, i.ToString(), market.LocalOpenTime, null, 1000, new TimeSpan(1, 0, 0, 0));
        sched.ScheduleJob(jobDetail, trigger);
    }
    

Quartz.net 触发先前计划的作业

1)您可能需要考虑使用时间表为0 0 9,15 * * ?CronTriggerImpl。这将允许您使用 1 个触发器设置整个计划。这里有一个关于 cron 触发器的好教程(即使它是针对以前的 Quartz 版本):http://quartznet.sourceforge.net/tutorial/lesson_6.html

2) 将 myCronTrigger.MisfireInstruction 属性设置为"不执行任何操作"。文档说这个值应该在CronTriggerImpl类中定义,但我没有看到它。在Visual Studio中使用IntelliSense可能会有更好的运气。

3) 查看上面 (1) 中的 Cron 教程链接。你可以使用这样的东西:0 0 9,15 * * MON-FRI