public async void Post([FromBody] Services.Notification.NotificationSchedule value) { Logger.LogInformation($"Post Trigger for {value.SubscriberID} - {value.NotificationType}"); try { var triggerCreator = new TriggerCreator(Scheduler); var trigger = await triggerCreator.FillTriggerAsync(value); await Scheduler.Standby(); await Scheduler.ScheduleJob(trigger); // created trigger is not started, so need to do that: if (value.Enable) { await Scheduler.ResumeTrigger(trigger.Key); } else { await Scheduler.PauseTrigger(trigger.Key); } } finally { await Scheduler.Start(); } }
public async Task <ITrigger> FillTriggerAsync(Services.Notification.NotificationSchedule value) { DayOfWeek[] weekDays = new DayOfWeek[7]; int i = 0; if (value.RunOnSunday) { weekDays[i++] = DayOfWeek.Sunday; } if (value.RunOnMonday) { weekDays[i++] = DayOfWeek.Monday; } if (value.RunOnTuesday) { weekDays[i++] = DayOfWeek.Tuesday; } if (value.RunOnWednesday) { weekDays[i++] = DayOfWeek.Wednesday; } if (value.RunOnThursday) { weekDays[i++] = DayOfWeek.Thursday; } if (value.RunOnFriday) { weekDays[i++] = DayOfWeek.Friday; } if (value.RunOnSaturday) { weekDays[i++] = DayOfWeek.Saturday; } if (await Scheduler.CheckExists(new TriggerKey(value.SubscriberID, value.NotificationType)) == true) { await Scheduler.DeleteJob(new JobKey(value.SubscriberID, value.NotificationType)); } var k = new TriggerKey(value.SubscriberID, value.NotificationType); var trigger = TriggerBuilder.Create() .WithIdentity(k) .WithSchedule(CronScheduleBuilder .AtHourAndMinuteOnGivenDaysOfWeek(value.RunOnHour, value.RunOnMinute, weekDays.Take(i).ToArray())) .ForJob(new JobKey(value.NotificationType)) .Build(); return(trigger); }