Я новичок в Quartz.net
и c#
. Имеем следующий код, чтобы запланировать задачу.Ожидается, что он изменит время расписания, если его запустить несколько раз.Но планировщик всегда запускался, возвращал значение 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);
}
. Ожидается, что он вернет тот же экземпляр планировщика, и должен быть bale для редактирования триггера
.