示例#1
0
        /// <summary>
        /// 暂停任务
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns>是否暂停成功</returns>
        public static async Task <bool> PauseJobAsync(CustomerJobInfo jobInfo)
        {
            var jobKey = CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);
            await _scheduler.PauseJob(jobKey);

            return(true);
        }
示例#2
0
        /// <summary>
        /// 更改任务运行周期
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns>是否更改成功</returns>
        public static async Task <bool> ModifyJobCronAsync(CustomerJobInfo jobInfo)
        {
            var scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
            var triggerKey      = CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            var trigger         = TriggerBuilder.Create().StartNow().WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                                  .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                  .Build();
            await _scheduler.RescheduleJob(triggerKey, trigger);

            return(true);
        }
示例#3
0
        /// <summary>
        /// 删除任务
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns>是否删除成功</returns>
        public static async Task <bool> DeleteJobAsync(CustomerJobInfo jobInfo)
        {
            var jobKey     = CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);
            var triggerKey = CreateTriggerKey(jobInfo.TriggerName, jobInfo.TriggerGroupName);
            await _scheduler.PauseTrigger(triggerKey);

            bool tjob = await _scheduler.UnscheduleJob(triggerKey);

            bool djob = await _scheduler.DeleteJob(jobKey);

            return(tjob == djob);
        }
示例#4
0
        /// <summary>
        /// 运行任务
        /// </summary>
        /// <param name="jobInfo">任务信息</param>
        /// <returns>是否创建成功</returns>
        public static async Task <bool> RunJobAsync(CustomerJobInfo jobInfo)
        {
            var    assembly = Assembly.LoadFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", jobInfo.Dllname));
            var    type     = assembly.GetType(jobInfo.FullJobName);
            JobKey jobKey   = CreateJobKey(jobInfo.JobName, jobInfo.JobGroupName);

            if (!await _scheduler.CheckExists(jobKey))
            {
                IJobDetail job = JobBuilder.Create(type).WithIdentity(jobKey)
                                 .UsingJobData(CreateJobDataMap("jobId", jobInfo.Id))
                                 .UsingJobData(CreateJobDataMap("requestUrl", jobInfo.RequestUrl))
                                 .Build();

                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(jobInfo.Cron);
                ITrigger            trigger         =
                    TriggerBuilder.Create().StartNow().WithIdentity(jobInfo.TriggerName, jobInfo.TriggerGroupName)
                    .ForJob(jobKey)
                    .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                    .Build();
                #region Quartz 任务miss之后三种操作

                /*
                 *           withMisfireHandlingInstructionDoNothing
                 * ——不触发立即执行
                 * ——等待下次Cron触发频率到达时刻开始按照Cron频率依次执行
                 *
                 * withMisfireHandlingInstructionIgnoreMisfires
                 * ——以错过的第一个频率时间立刻开始执行
                 * ——重做错过的所有频率周期后
                 * ——当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
                 *
                 * withMisfireHandlingInstructionFireAndProceed
                 * ——以当前时间为触发频率立刻触发一次执行
                 * ——然后按照Cron频率依次执行*/
                #endregion

                await _scheduler.ScheduleJob(job, trigger);
            }
            return(true);
        }
        public async Task <int> AddCustomerJobInfoAsync(string jobName, string jobGroupName, string triggerName, string triggerGroupName, string cron, string jobDescription, string requestUrl)
        {
            var customerJobInfo = new CustomerJobInfo
            {
                CreateTime       = DateTime.Now,
                JobStartTime     = DateTime.Now,
                Cron             = cron,
                Description      = jobDescription,
                JobGroupName     = jobGroupName,
                JobName          = jobName,
                TriggerState     = -1,
                TriggerGroupName = triggerGroupName,
                TriggerName      = triggerName,
                Dllname          = "Quartz.Net_JobBase.dll",
                FullJobName      = "Quartz.Net_JobBase.JobBase",
                RequestUrl       = requestUrl,
                Deleted          = false
            };
            var model = await _dbContext.CustomerJobInfo.AddAsync(customerJobInfo);

            await _dbContext.SaveChangesAsync();

            return(model.Entity.Id);
        }
        public async Task <int> UpdateCustomerJobInfoAsync(CustomerJobInfo customerJobInfo)
        {
            await _dbContext.SaveChangesAsync();

            return(customerJobInfo.Id);
        }