c# - 使用 Quartz.NET 调度 Cron 作业

标签 c# quartz-scheduler jobs quartz.net quartz.net-2.0

我正在尝试使用 Quartz.NET 安排一些作业,但我无法让它工作。我尝试了以下代码,但在达到指定时间时没有任何反应。

    public void Test()
    {
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler = schedulerFactory.GetScheduler();

        IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>()
            .WithIdentity("TestJob")
            .Build();
        ITrigger trigger = TriggerBuilder.Create()
            .ForJob(jobDetail)
            .WithCronSchedule("0 26 18 * * ?")
            .WithIdentity("TestTrigger")
            .StartNow()
            .Build();
        scheduler.ScheduleJob(jobDetail, trigger);
        scheduler.Start();
    }

更新:

我还尝试了以下操作,以确保不是 Cron 表达式导致了问题。对我也不起作用...

IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>()
                .WithIdentity("TestJob", "TestGroup")
                .Build();
            ITrigger trigger = TriggerBuilder.Create()  
                .ForJob(jobDetail)
                .WithSimpleSchedule(x=> x.RepeatForever().WithIntervalInSeconds(10).WithMisfireHandlingInstructionFireNow())
                .StartAt(new DateTimeOffset(DateTime.UtcNow.AddSeconds(10)))
                .WithIdentity("TestTrigger", "TestGroup")
                .Build();
            scheduler.ScheduleJob(jobDetail, trigger);
            scheduler.Start();
            Console.WriteLine(DateTime.UtcNow.ToLongTimeString());
            Console.WriteLine(trigger.GetNextFireTimeUtc());

请注意,trigger.GetNextFireTimeUtc() 返回一个有效的时间值,但作业永远不会被触发。

我哪里出错了?

最佳答案

您的示例代码一切正常,可能 SatellitePaymentGenerationJob 实现中的 Execute 方法错误,或者作业已执行但未在预期时间内执行。现在的形状是每天18点26分发射,这是你想要的吗?

与我的代码比较(工作):

class Program
{
    static void Main(string[] args)
    {
        Test();
    }

    public static void Test()
    {
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler = schedulerFactory.GetScheduler();

        IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>()
            .WithIdentity("TestJob")
            .Build();
        ITrigger trigger = TriggerBuilder.Create()
            .ForJob(jobDetail)
            .WithCronSchedule("0 45 20 * * ?")
            .WithIdentity("TestTrigger")
            .StartNow()
            .Build();
        scheduler.ScheduleJob(jobDetail, trigger);
        scheduler.Start();
    }
}

internal class SatellitePaymentGenerationJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Console.WriteLine("test");
    }
}

关于c# - 使用 Quartz.NET 调度 Cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14912494/

相关文章:

c# - 当前上下文中不存在名称 'sr'

c# - Windows.AI.MachineLearning.Preview - 从流中加载模型引发异常

shell - (shell 脚本 - qsub)在下一个命令之前等待提交的作业完成

java - 无法将 web.xml 中的 Maven 资源文件夹中的属性文件作为上下文参数值

java - 向 RCP 中的作业添加进度条

java - 由于夏令时而跳过作业

c# - 大型原始数组的 protobuf-net 序列化性能

c# - 将特殊字符转换为 Html 编码字符

java - quartz 调度器 : Trigger some jobs on every cluster node and some only once per cluster

java - 所有 Quartz Scheduler 线程都进入 TIMED_WAITING?