/// <summary> /// Утановить интервал для триггера /// </summary> /// <param name="triggerBuilder">Билдер триггера</param> /// <param name="settings">Настройки триггера</param> /// <returns>Билдер триггера</returns> public static TriggerBuilder SetInterval(this TriggerBuilder triggerBuilder, TriggerSettings settings) => triggerBuilder.WithSimpleSchedule(builder => { switch (settings.IntervalUnit) { case IntervalUnit.Millisecond: builder.WithInterval(TimeSpan.FromMilliseconds(settings.Interval)); break; case IntervalUnit.Second: builder.WithIntervalInSeconds(settings.Interval); break; case IntervalUnit.Minute: builder.WithIntervalInMinutes(settings.Interval); break; case IntervalUnit.Hour: builder.WithIntervalInHours(settings.Interval); break; case IntervalUnit.Day: builder.WithInterval(TimeSpan.FromDays(settings.Interval)); break; case IntervalUnit.Week: builder.WithInterval(TimeSpan.FromDays(settings.Interval * 7)); break; case IntervalUnit.Month: builder.WithInterval(TimeSpan.FromDays(settings.Interval * 30)); break; case IntervalUnit.Year: builder.WithInterval(TimeSpan.FromDays(settings.Interval * 365)); break; default: throw new ArgumentOutOfRangeException(); } builder.RepeatForever(); });
/// <summary> /// Конфигурирование триггера /// </summary> /// <param name="scheduler">Планировщик</param> /// <param name="settings">Настройки триггера</param> /// <returns>Асинхронная операция успешности конфигурирования</returns> public static async Task <bool> ConfigureTriggerAsync(this IScheduler scheduler, TriggerSettings settings) { var triggerKey = new TriggerKey(settings.Name); var trigger = await scheduler.GetTrigger(triggerKey); if (trigger == null) { return(false); } trigger.GetTriggerBuilder() .SetInterval(settings) .Build(); if (!scheduler.IsStarted) { await scheduler.Start(CancellationToken.None); } return(true); }
/// <summary> /// Запланировать работу /// </summary> /// <param name="scheduler">Планировщик</param> /// <param name="jobType">Тип работы</param> /// <param name="settings">Настройки триггера</param> /// <param name="map">Параметры для работы</param> public static async Task ScheduleJobTrigger(this IScheduler scheduler, Type jobType, TriggerSettings settings, JobDataMap map = null) { var trigger = TriggerBuilder.Create().StartNow() .WithIdentity(settings.Name) .SetInterval(settings) .Build(); var jobDetail = JobBuilder.Create(jobType) .UsingJobData(map ?? new JobDataMap()) .WithIdentity(settings.Name) .Build(); await scheduler.ScheduleJob(jobDetail, trigger); if (!scheduler.IsStarted) { await scheduler.Start(CancellationToken.None); } }