/// <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); }
/// <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); }
/// <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); }
/// <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); }