public async Task RunAsync() { IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler(); DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 10); IJobDetail job = JobBuilder.Create <InterruptJob>() .WithIdentity("job1", "jobGroup1") .Build(); ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "triggerGroup1") .StartAt(startTime) .WithSimpleSchedule(x => x.WithIntervalInSeconds(3).RepeatForever()) .Build(); DateTimeOffset df = await scheduler.ScheduleJob(job, trigger); ConsoleExtend.WriteLineRed($"作业【{job.Key}】 触发器【{trigger.Key}】 执行时间【{df.LocalDateTime}】 " + $"执行时间间隔【{trigger.RepeatInterval.Seconds}】s 重复执行次数【{trigger.RepeatCount}】"); await scheduler.Start(); Console.WriteLine("每7秒中断一次调度"); for (int i = 0; i < 50; i++) { await Task.Delay(TimeSpan.FromSeconds(7)); try { await scheduler.Interrupt(job.Key); } catch (Exception ex) { ConsoleExtend.WriteLineError(ex.Message); } } await scheduler.Shutdown(true); SchedulerMetaData metaData = await scheduler.GetMetaData(); ConsoleExtend.WriteLineDebug2($"执行了 {metaData.NumberOfJobsExecuted} 次作业."); ConsoleExtend.WriteLineDebug2($"作业【{job.Key}】 中循环共执行了【{InterruptJob.ExecutedCount}】次" + $",其中成功【{InterruptJob.SuccessfulCount}】次,中断【{InterruptJob.InterruptlCount}】次"); }
public Task Execute(IJobExecutionContext context) { try { int denominator = context.JobDetail.JobDataMap.GetIntValue(denominatorKey); ConsoleExtend.WriteLineDebug1($"【{DateTime.Now}】 开始执行作业 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】 参数【分母:{denominator}】"); var i = 10 / denominator; } catch (Exception e) { ConsoleExtend.WriteLineError($"{GetType().FullName}作业执行异常:{e.Message}"); context.JobDetail.JobDataMap.Put(denominatorKey, 1); JobExecutionException e2 = new JobExecutionException(); e2.RefireImmediately = true; // 设置作业马上重新开始 throw e2; } ConsoleExtend.WriteLineDebug2($"【{DateTime.Now}】 作业执行完成 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】"); return(Task.FromResult(true)); }
public Task Execute(IJobExecutionContext context) { ConsoleExtend.WriteLineDebug1($"【{DateTime.Now}】 开始执行作业 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】"); int denominator = 0; try { var i = 10 / denominator; } catch (Exception e) { ConsoleExtend.WriteLineError($"{GetType().FullName}作业执行异常:{e.Message}"); denominator = 1; JobExecutionException e2 = new JobExecutionException(); e2.UnscheduleAllTriggers = true; // Quartz 会自动取消与此工作相关的所有触发器,这样它就不会再次运行了。 throw e2; } ConsoleExtend.WriteLineDebug2($"【{DateTime.Now}】 作业执行完成 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】"); return(Task.FromResult(true)); }