Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }