using Quartz; using Quartz.Impl; namespace Server.System { public abstract class Scheduler : IJob { public abstract void Process(); public async Task Execute(IJobExecutionContext context) { Process(); } } public class Schedule where T : Scheduler { private StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); private IScheduler scheduler; private string jobName; private string group; private string triggerName; private string cron; public Schedule(string jobName, string group, string triggerName, string cron) { this.jobName = jobName; this.group = group; this.triggerName = triggerName; this.cron = cron; } public async Task Start() { scheduler = await schedulerFactory.GetScheduler(); await scheduler.Start(); IJobDetail job = JobBuilder.Create() .WithIdentity(jobName, group) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(triggerName, group) .StartNow() .WithCronSchedule(cron) .Build(); await scheduler.ScheduleJob(job, trigger); } public async Task Stop() { await scheduler.Shutdown(); } } }