using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Server
{
///
/// 自定义实时重复任务
///
public class CustomRealRepeatJob : Quartz.IJob
{
//自定义实时任务字典
private static Dictionary _dict=new Dictionary();
///
/// 任务id
///
public long JobID { get; set; }
///
///
///
public Task Execute(IJobExecutionContext context)
{
return Task.Run(async () =>
{
try
{
//获取任务
var model = new Service.CustomRealJob().GetByID(JobID);
//获取任务失败后,停止任务并移除任务辅助类
if (model == null)
{
if (_dict.ContainsKey(JobID))
{
await _dict[JobID].CancelJob();
_dict.Remove(JobID);
}
return;
}
//尚未创建实时任务时,创建实时任务辅助类
if (!_dict.ContainsKey(JobID))
{
var jobHelper = new CustomRealJobHelper();
await jobHelper.StartJob(model);
_dict.Add(JobID, jobHelper);
return;
}
//任务已存在,检查任务执行间隔是否发生变化,若发生变化,重置任务
if (_dict[JobID].Instance.Interval != model.Interval)
{
await _dict[JobID].CancelJob();
var jobHelper = new CustomRealJobHelper();
await jobHelper.StartJob(model);
_dict[JobID] = jobHelper;
}
}
catch (Exception ex)
{
LogHelper.Error("自定义实时重复任务,执行出错", ex);
var e = new JobExecutionException(ex);
throw e;
}
});
}
///
/// 取消任务
///
///
public async Task CancelJob()
{
await CancelJob(JobID);
}
///
/// 取消任务
///
/// 任务id
public static async Task CancelJob(long jobId)
{
if (_dict.ContainsKey(jobId))
{
await _dict[jobId].CancelJob();
_dict.Remove(jobId);
}
}
///
/// 取下任务
///
public static async Task CancelJobs()
{
foreach (var key in _dict.Keys)
{
await CancelJob(key);
}
}
}
}