/// <summary> /// 添加一个工作调度(映射程序集指定IJob实现类) /// </summary> /// <param name="m"></param> /// <returns></returns> private async Task <BaseQuartzNetResult> AddScheduleJob(ScheduleEntity m) { var result = new BaseQuartzNetResult() { Code = -1, Msg = "" }; try { //检查任务是否已存在 var jk = new JobKey(m.JobName, m.JobGroup); if (await(await Scheduler()).CheckExists(jk)) { //删除已经存在任务 await(await Scheduler()).DeleteJob(jk); ScheduleList.Remove(m.Id, out ScheduleEntity value); } //反射获取任务执行类 Assembly assembly = Assembly.Load(new AssemblyName(m.AssemblyName)); Type jobType = assembly.GetTypes().FirstOrDefault(p => p.Name == m.ClassName); // 定义这个工作,并将其绑定到我们的IJob实现类 IJobDetail job = new JobDetailImpl(m.JobName, m.JobGroup, jobType); //IJobDetail job = JobBuilder.CreateForAsync<T>().WithIdentity(m.JobName, m.JobGroup).Build(); // 创建触发器 ITrigger trigger; //校验是否正确的执行周期表达式 if (!string.IsNullOrEmpty(m.Cron) && CronExpression.IsValidExpression(m.Cron)) { trigger = CreateCronTrigger(m); } else { trigger = CreateSimpleTrigger(m); } // 设置监听器 JobListener listener = new JobListener(); // IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(job.Key); (await Scheduler()).ListenerManager.AddJobListener(listener, GroupMatcher <JobKey> .AnyGroup()); // 告诉Quartz使用我们的触发器来安排作业 await(await Scheduler()).ScheduleJob(job, trigger); ScheduleList.GetOrAdd(m.Id, m); result.Code = 200; } catch (Exception ex) { result.Code = -1; result.Msg = ex.Message; } return(result); }
/// <summary> /// 添加任务调度(指定IJob实现类) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="m"></param> /// <returns></returns> private async Task <BaseQuartzNetResult> AddScheduleJob <T>(ScheduleEntity m) where T : IJob { var result = new BaseQuartzNetResult() { Code = -1, Msg = "" }; try { //检查任务是否已存在 var jk = new JobKey(m.JobName, m.JobGroup); if (await(await Scheduler()).CheckExists(jk)) { //删除已经存在任务 await(await Scheduler()).DeleteJob(jk); ScheduleList.Remove(m.Id, out ScheduleEntity value); } // 定义这个工作,并将其绑定到我们的IJob实现类 IJobDetail job = JobBuilder.CreateForAsync <T>().WithIdentity(m.JobName, m.JobGroup).Build(); // 创建触发器 ITrigger trigger; //校验是否正确的执行周期表达式 if (!string.IsNullOrEmpty(m.Cron) && CronExpression.IsValidExpression(m.Cron)) { trigger = CreateCronTrigger(m); } else { trigger = CreateSimpleTrigger(m); } // 设置监听器 JobListener listener = new JobListener(); // IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(job.Key); (await Scheduler()).ListenerManager.AddJobListener(listener, GroupMatcher <JobKey> .AnyGroup()); // 告诉Quartz使用我们的触发器来安排作业 await(await Scheduler()).ScheduleJob(job, trigger); ScheduleList.GetOrAdd(m.Id, m); result.Code = 200; } catch (Exception ex) { await Console.Out.WriteLineAsync(string.Format("添加任务出错", ex.Message)); result.Code = 1001; result.Msg = ex.Message; } return(result); }