Ejemplo n.º 1
0
        public async Task Execute(IJobExecutionContext context)
        {
            JobDataMap map = context.JobDetail.JobDataMap;

            int executeCount = 0;

            if (map.ContainsKey(NumExecutions))
            {
                executeCount = map.GetInt(NumExecutions);
            }

            executeCount++;

            map.Put(NumExecutions, executeCount);

            int delay = 5;

            if (map.ContainsKey(ExecutionDelay))
            {
                delay = map.GetInt(ExecutionDelay);
            }

            ConsoleExtend.WriteLineDebug1($"【{DateTime.Now}】 开始执行 触发器【{context.Trigger.Key}】 作业【{context.JobDetail.Key}】 执行次数【{executeCount}】");
            await Task.Delay(TimeSpan.FromSeconds(delay));

            ConsoleExtend.WriteLineDebug2($"【{DateTime.Now}】 执行完成 触发器【{context.Trigger.Key}】 作业【{context.JobDetail.Key}】 执行次数【{executeCount}】");
        }
Ejemplo n.º 2
0
        public async Task Execute(IJobExecutionContext context)
        {
            var executeTime = DateTime.Now;

            ConsoleExtend.WriteLineDebug($"【{executeTime}】 开始执行作业 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】");
            try
            {
                for (int i = 0; i < 5; i++)
                {
                    LockAction(() => ExecutedCount++);
                    await Task.Delay(TimeSpan.FromSeconds(10));

                    if (context.CancellationToken.IsCancellationRequested)
                    {
                        ConsoleExtend.WriteLineDebug1($"【{DateTime.Now}】 作业被打断 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】 触发时间【{executeTime}】");
                        // 也可以抛出JobExecutionException异常
                        LockAction(() => InterruptlCount++);
                    }
                    else
                    {
                        LockAction(() => SuccessfulCount++);
                    }
                }
            }
            finally
            {
                ConsoleExtend.WriteLineDebug2($"【{DateTime.Now}】 作业执行完成 作业【{context.JobDetail.Key}】 触发器【{context.Trigger.Key}】 触发时间【{executeTime}】");
            }
        }
Ejemplo n.º 3
0
        public async Task RunAsync()
        {
            IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();

            #region 添加日历
            AnnualCalendar holidays = new AnnualCalendar(); // 创建一个年度假日日历

            // 元旦 1月1日
            DateTime NewYearDay = new DateTime(DateTime.UtcNow.Year, 1, 1);
            holidays.SetDayExcluded(NewYearDay, true); // true 排除元旦执行  false 在元旦执行

            // 劳动节 5月1日
            DateTime LaborDay = new DateTime(DateTime.UtcNow.Year, 5, 1);
            holidays.SetDayExcluded(LaborDay, true); // true 排除元旦执行  false 在元旦执行

            // 国庆节 10月1日
            DateTime NationalDay = new DateTime(DateTime.UtcNow.Year, 10, 1);
            holidays.SetDayExcluded(NationalDay, true); // true 排除元旦执行  false 在元旦执行

            await scheduler.AddCalendar("holidays", holidays, true, true);

            #endregion

            DateTimeOffset runDate = DateBuilder.DateOf(10, 0, 0, 1, 10);

            IJobDetail job = JobBuilder.Create <HelloJob2>()
                             .WithIdentity("job1", "jobGroup1")
                             .Build();

            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
                                     .WithIdentity("trigger1", "triggerGroup1")
                                     .StartAt(runDate)
                                     .WithSimpleSchedule(x => x.WithIntervalInHours(2).RepeatForever())
                                     .ModifiedByCalendar("holidays")
                                     .Build();

            DateTimeOffset df = await scheduler.ScheduleJob(job, trigger);

            ConsoleExtend.WriteLineDebug1($"作业【{job.Key}】 触发器【{trigger.Key}】 将在【{df.LocalDateTime}】执行" +
                                          $",重复执行时间间隔【{trigger.RepeatInterval.Hours}】小时 重复【{trigger.RepeatCount}】次");

            await scheduler.Start();

            Console.WriteLine("等待30秒。。。");
            await Task.Delay(TimeSpan.FromSeconds(30));

            await scheduler.Shutdown(true);

            ConsoleExtend.WriteLineDebug2($"共执行了{(await scheduler.GetMetaData()).NumberOfJobsExecuted}个作业");
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        public Task TriggerFired(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            return(new TaskFactory().StartNew(() =>
            {
                ConsoleExtend.WriteLineDebug1(@"监听器名称【{0}】 触发器【{1}=>{2}】触发开始 触发器描述【{3}】 作业【{4}=》{5}】 触发器参数【{6}】 
触发器日历名称【{7}】 最后执行时间【{8}】 下次执行时间【{9}】 作业执行时间【{10}】 触发的实际时间【{11}】 context中下次执行时间【{12}】"
                                              , Name
                                              , trigger.Key.Group
                                              , trigger.Key.Name
                                              , trigger.Description
                                              , trigger.JobKey.Group
                                              , trigger.JobKey.Name
                                              , Newtonsoft.Json.JsonConvert.SerializeObject(trigger.JobDataMap)
                                              , trigger.CalendarName
                                              , trigger.FinalFireTimeUtc.HasValue ? trigger.FinalFireTimeUtc.Value.LocalDateTime.ToString() : String.Empty //最终执行时间
                                              , trigger.GetFireTimeAfter(DateTimeOffset.Now).HasValue
                        ? trigger.GetFireTimeAfter(DateTimeOffset.Now).Value.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss") : String.Empty                  //下次执行时间
                                              , new DateTime(context.JobRunTime.Ticks)                                                                     //作业执行时间
                                              , context.FireTimeUtc.LocalDateTime
                                              , context.NextFireTimeUtc.HasValue ? context.NextFireTimeUtc.Value.LocalDateTime.ToString() : String.Empty
                                              );
            }));
        }