示例#1
0
        public static async Task <string> TriggerAction(this ISchedulerFactory schedulerFactory, QuartzOption quartzOption, JobAction action)
        {
            try
            {
                IScheduler scheduler = await schedulerFactory.GetScheduler();

                List <JobKey> jobKeys = scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals(quartzOption.GroupName)).Result.ToList();
                if (jobKeys == null || jobKeys.Count() == 0)
                {
                    return(string.Format("未找到分组:{0}", quartzOption.GroupName));
                }
                JobKey jobKey = jobKeys.Where(s => scheduler.GetTriggersOfJob(s).Result.Any(x => (x as CronTriggerImpl).Name == quartzOption.JobName)).FirstOrDefault();
                if (jobKey == null)
                {
                    return(string.Format("未找到触发器:{0}", quartzOption.JobName));
                }
                var triggers = await scheduler.GetTriggersOfJob(jobKey);

                ITrigger trigger = triggers?.Where(x => (x as CronTriggerImpl).Name == quartzOption.JobName).FirstOrDefault();

                if (trigger == null)
                {
                    return(string.Format("未找到触发器:{0}", quartzOption.JobName));
                }
                switch (action)
                {
                case JobAction.除:
                case JobAction.修改:
                    await scheduler.PauseTrigger(trigger.Key);

                    await scheduler.UnscheduleJob(trigger.Key);    // 移除触发器

                    await scheduler.DeleteJob(trigger.JobKey);

                    break;

                case JobAction.暂停:
                case JobAction.停止:
                case JobAction.开启:
                    if (action == JobAction.暂停)
                    {
                        await scheduler.PauseTrigger(trigger.Key);
                    }
                    else if (action == JobAction.开启)
                    {
                        await scheduler.ResumeTrigger(trigger.Key);

                        //await scheduler.ResumeTrigger(trigger.Key);
                    }
                    else
                    {
                        await scheduler.Shutdown();
                    }
                    break;

                case JobAction.立即执行:
                    await scheduler.TriggerJob(jobKey);

                    break;
                }
                return(string.Format("{0}成功", action.GetEnumText()));
            }
            catch (Exception ex)
            {
                return(string.Format("{0}失败:", action.GetEnumText(), ex.Message));
            }
        }