如何安排作业在Quartz.Net Scheduler中完成当前作业后立即运行?

时间:2018-08-27 13:19:27

标签: c# quartz-scheduler quartz.net

我有一个EventJob类,它是从IJobEventScheduler类派生的。

public class EventJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {            
            //some code...
        }
    }

public class EventScheduler 
    {
        public ITrigger GetEventTrigger()
        {
            DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second);
            //Time Scheduling Setting 
            ITrigger eventTrigger = TriggerBuilder.Create()
                .WithIdentity("EventTrigger")
                .StartAt(startTime)
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
                .Build();
            return eventTrigger;
        }

        public IJobDetail GetJobDetail()
        {
            //Job Definition Setting
            IJobDetail eventJob = JobBuilder.Create<EventJob>()
                .WithIdentity("EventJob")
                .Build();
            return eventJob;
        }
    }

因此,我需要添加其他作业,该作业在使用[DisallowConcurrentExecution]配置完成当前作业之后立即运行。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用IStatefulJob实现此目的-以所需的时间间隔运行两个作业,并且该作业不会同时运行。

http://quartznet.sourceforge.net/apidoc/

  

IStatefulJob实例遵循与常规规则略有不同的规则   IJob实例。关键区别在于它们关联的JobDataMap   在每次执行该作业后重新保留,从而保留   下一次执行的状态。另一个区别是有状态   不允许作业同时执行,这意味着新的触发器   在IJob.Execute方法完成之前发生的操作   延迟。

答案 1 :(得分:0)

最后,经过一番调查,我找到了实现此目标的好方法。

由@Vishal在How to do “sequential” Job Scheduling (Quartz?)中描述