多次使用GetDefaultScheduler的问题

时间:2019-04-04 16:21:18

标签: c# quartz.net-3.0

我是Quartz.netc#的新手。使用以下代码安排任务。如果它多次运行,则预期会更改计划的时间。但是Scheduler.Is Started始终返回false,最终创建了一个新的而不是修改现有的

public static async Task scheduleCosmosScaling(CosmosPayLoad payload)
        {
            DateTime starttime = DateTime.Now.AddMinutes(payload.minutes);
            logger.Info("Starting  the schedule process with  execution time ( "+ starttime + " ) for" + payload.cosmosDb + "/" + payload.cosmosCollection );

            string group = "Group_" + payload.cosmosName + "_DB_" + payload.cosmosDb;
            string triggerName = "Trigger" + payload.cosmosCollection;
            string jobName = "Job" + payload.cosmosCollection;
            scheduler = await StdSchedulerFactory.GetDefaultScheduler(); //DefaultQuartzScheduler
            if (!scheduler.IsStarted)
            {
                logger.Info("Starting scheduler");
                await scheduler.Start();
            }
            ITrigger oldTrigger = await scheduler.GetTrigger(new TriggerKey(triggerName, group));
            if (oldTrigger != null) {
                IJobDetail  jobDetail = (scheduler.GetJobDetail(new JobKey(triggerName, group))).Result;
                int rescheduleRU = ((CosmosPayLoad)jobDetail.JobDataMap.Get("cosmospayload")).cosmosOldRU;
                logger.Info("Rescheduling the existing schedule with new execution time ( " + starttime + " ) with RU value " + rescheduleRU);
                var triggerBuilder = oldTrigger.GetTriggerBuilder();
                var newTrigger  = triggerBuilder.StartAt(starttime).WithIdentity(triggerName, group).Build();
                await scheduler.RescheduleJob(oldTrigger.Key, newTrigger);
            } else  {
                logger.Info("Creating new schedule with execution time ( " + starttime + " )  with RU value " + payload.cosmosOldRU);
                IJobDetail job = JobBuilder.Create<CosmosScheduler>().WithIdentity(jobName, group).Build();
                job.JobDataMap["cosmospayload"] = payload;
                ITrigger trigger = TriggerBuilder.Create().WithIdentity(triggerName, group).StartAt(starttime).WithPriority(1).Build();
                await scheduler.ScheduleJob(job, trigger);
            }
            logger.Info("Rescheduling / Scheduling completed  for" + payload.cosmosDb + "/" + payload.cosmosCollection);
        }

期望返回相同的调度程序实例,并且应该大胆地编辑触发器

0 个答案:

没有答案