Как я могу запланировать выполнение задания сразу же после завершения текущего задания в Quartz.Net Scheduler? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть класс EventJob, полученный из классов IJob и EventScheduler для настройки моей работы.

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] config.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Наконец, после некоторого расследования, я нашел хороший способ достичь этой цели.

Он описан @Vishal в Как сделать «последовательное» планирование заданий (кварц?)

0 голосов
/ 29 августа 2018

Вы можете достичь этого с помощью IStatefulJob - запустите оба задания с заданным интервалом, и оно не будет выполняться одновременно.

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

Экземпляры IStatefulJob следуют правилам, немного отличающимся от обычных IJob экземпляры. Ключевое отличие заключается в том, что их связанный JobDataMap повторно сохраняется после каждого выполнения задания, сохраняя тем самым состояние для следующего выполнения. Другое отличие состоит в том, что задания не могут выполняться одновременно, что означает новые триггеры что произойдет до завершения метода IJob.Execute будет задерживается.

...