using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.Server { /// /// 自定义计划服务任务 /// public class CustomCronServiceJob : Quartz.IJob { private static List _jobHelpers = new List(); /// /// /// public Task Execute(IJobExecutionContext context) { return Task.Run(async () => { try { #region 加载所有任务 var jobList = new Service.CustomCronJob().GetAll(); if (jobList == null || jobList.Count < 1) { LogHelper.Info("自定义计划服务任务中,未检索到自定义计划任务信息"); CancelJobs(); return; } jobList = jobList.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList(); if (jobList.Count < 1) { LogHelper.Info("自定义计划服务任务中,未检索到有效自定义计划任务信息"); CancelJobs(); return; } #endregion #region 开启任务 foreach (var job in jobList) { var jobHelper = _jobHelpers.Find(t => t.Instance.ID == job.ID); if (jobHelper == null) { jobHelper = new CustomCronRepeatJobHelper(); await jobHelper.StartJob(job); _jobHelpers.Add(jobHelper); LogHelper.Info($"自定义计划服务任务中:ID:{job.ID},NO:{job.NO},Name:{job.Name} 的任务开启!"); } } #endregion #region 关闭任务 foreach (var jobHelper in _jobHelpers.ToList()) { var job = jobList.Find(t => t.ID == jobHelper.Instance.ID); if (job == null) { await jobHelper.CancelJob(); _jobHelpers.Remove(jobHelper); LogHelper.Info($"自定义计划服务任务中:ID:{job.ID},NO:{job.NO},Name:{job.Name} 的任务关闭!"); continue; } if (job.Repeat != jobHelper.Instance.Repeat) { await jobHelper.CancelJob(); _jobHelpers.Remove(jobHelper); var rJobHelper = new CustomCronRepeatJobHelper(); await rJobHelper.StartJob(job); _jobHelpers.Add(rJobHelper); } } #endregion LogHelper.Info($"自定义计划服务任务中,开启任务数量为{_jobHelpers.Count}!"); } catch (Exception ex) { LogHelper.Error("自定义计划服务任务中,执行出错", ex); var e = new JobExecutionException(ex); throw e; } }); } /// /// 取消任务 /// public static void CancelJobs() { if (_jobHelpers != null && _jobHelpers.Count > 0) { _jobHelpers.ForEach(async x => await x.CancelJob()); _jobHelpers.Clear(); } } } }