using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Quartz; namespace IStation.Server { /// /// 能效分析计划任务辅助类 /// public class EtaAnalyCronJobHelper { private IScheduler _sched;//调度器 /// /// 客户标识 /// public long CorpID { get; set; } /// /// 分析频率 /// public int Frequency { get; private set; } /// /// 开始任务 /// public async Task StartJob(long corpId, int frequency) { if (_sched != null) return; this.CorpID = corpId; this.Frequency = frequency; var jobName = EtaAnalyCronJobNameHelper.GetJobName(this.CorpID); var jobGroupName = EtaAnalyCronJobNameHelper.GetJobGroupName(this.CorpID); var triggerName = EtaAnalyCronJobNameHelper.GetTriggerName(this.CorpID); // 1.创建scheduler的引用 var fac = new Quartz.Impl.StdSchedulerFactory(); _sched = await fac.GetScheduler(); //2.启动 scheduler await _sched.Start(); //3.创建任务 var job = JobBuilder.Create() .WithIdentity(jobName, jobGroupName) .UsingJobData("CorpID", this.CorpID) .UsingJobData("Frequency", this.Frequency) .Build(); //4.创建Trigger var trigger = TriggerBuilder.Create() .WithIdentity(triggerName, jobGroupName) .WithSimpleSchedule(x => x.WithIntervalInSeconds(frequency) .RepeatForever().WithMisfireHandlingInstructionNextWithRemainingCount()) .Build(); //5.加入调度管理器 await _sched.ScheduleJob(job, trigger); } /// /// 取消任务 /// public async Task CancelJob() { if (_sched == null) return; var jobGroupName = EtaAnalyCronJobNameHelper.GetJobGroupName(this.CorpID); var triggerName = EtaAnalyCronJobNameHelper.GetTriggerName(this.CorpID); var triggerKey = new TriggerKey(triggerName, jobGroupName); if (await _sched.CheckExists(triggerKey)) { await _sched.UnscheduleJob(triggerKey); } } } }