/// <summary>
        /// 添加一个job
        /// </summary>
        /// <returns>The schedule job.</returns>
        /// <param name="scheduleEntity">Schedule entity.</param>
        public async Task <ScheduleEntity> AddScheduleJob(ScheduleEntity scheduleEntity)
        {
            try
            {
                if (scheduleEntity != null)
                {
                    if (scheduleEntity.TimeStart == null)
                    {
                        scheduleEntity.TimeStart = DateTime.Now;
                    }
                    //DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(scheduleEntity.TimeStart, 1);
                    DateTimeOffset starRunTime = new DateTimeOffset(scheduleEntity.TimeStart, TimeSpan.Zero);
                    if (scheduleEntity.TimeEnd == null)
                    {
                        scheduleEntity.TimeEnd = DateTime.MaxValue.AddDays(-1);
                    }
                    //DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(scheduleEntity.TimeEnd, 1);
                    DateTimeOffset endRunTime = new DateTimeOffset(scheduleEntity.TimeEnd, TimeSpan.Zero);
                    _scheduler = await _schedulerFactory.GetScheduler();

                    await _scheduler.Start();

                    JobDataMap jobDataMap = new JobDataMap();
                    jobDataMap.Add("name", "jack");


                    IJobDetail job = JobBuilder.Create <HelloJob>()
                                     .WithIdentity(scheduleEntity.JobKey, scheduleEntity.JobGroup)
                                     .UsingJobData(jobDataMap)
                                     .Build();
                    ITrigger trigger = TriggerBuilder.Create()
                                       .StartAt(starRunTime)
                                       .EndAt(endRunTime)
                                       .WithIdentity(scheduleEntity.TriggerKey, scheduleEntity.TriggerGroup)
                                       .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(scheduleEntity.RepeatCount - 1))
                                       .Build();
                    await _scheduler.ScheduleJob(job, trigger);

                    //await _scheduler.Start();
                    //await PauseScheduleJobAsync(scheduleEntity);
                    //return true;


                    //第六步:创建任务监听,用来解决任务执行失败的情况. HelloJob类实现IJobListener接口
                    IJobListener jobListener = new HelloJob(_loggerFactory);

                    // 注: 任务监听是通过 IJobListener.Name 来区分的.以下逻辑避免多个任务监听情况下造成的监听被覆盖.
                    // a) 获取当前任务监听实例的名称.
                    var listener = _scheduler.ListenerManager.GetJobListener(jobListener.Name);
                    // b) 通过job.Key 获取该任务在调度系统中的唯一实体
                    IMatcher <JobKey> matcher = KeyMatcher <JobKey> .KeyEquals(job.Key);

                    // c) 注意: 任务监听系统中已存在当前任务监听实例,与新添加任务监听的逻辑的区别.
                    if (listener != null)
                    {
                        // 如果已存在该任务监听实例,调用此方法,为该任务监听实例新增监听对象
                        _scheduler.ListenerManager.AddJobListenerMatcher(jobListener.Name, matcher);
                    }
                    else
                    {
                        // 任务监听系统中不存在该任务监听实例,则调用此方法新增监听对象
                        _scheduler.ListenerManager.AddJobListener(jobListener, matcher);
                    }

                    //创建触发器监听,触发器监听与任务监听同名也不影响
                    ITriggerListener triggerListener = new HelloJob(_loggerFactory);
                    var triListener = _scheduler.ListenerManager.GetTriggerListener(triggerListener.Name);
                    IMatcher <TriggerKey> triMatcher = KeyMatcher <TriggerKey> .KeyEquals(trigger.Key);

                    if (triListener != null)
                    {
                        _scheduler.ListenerManager.AddTriggerListenerMatcher(triggerListener.Name, triMatcher);
                    }
                    else
                    {
                        _scheduler.ListenerManager.AddTriggerListener(triggerListener, triMatcher);
                    }

                    ISchedulerListener mySchedListener = new HelloJob(_loggerFactory);

                    _scheduler.ListenerManager.AddSchedulerListener(mySchedListener);
                }
                bool res = _baseRepositoryMysql.Add(scheduleEntity);
                if (res)
                {
                    await PauseScheduleJobAsync(scheduleEntity);

                    return(scheduleEntity);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            HelloJob job = new HelloJob();

            log.Info("Form1_Loading...");
        }