private async Task Start(JobEntity jobView) { var jobRuntime = await JobFactory.CreateJobRuntime(_serviceRoute, jobView); JobDataMap map = new JobDataMap { new KeyValuePair <string, object> ("JobRuntime", jobRuntime) }; IJobDetail job = JobBuilder.Create().OfType(typeof(JobImplementation)).WithIdentity(jobView.Id).UsingJobData(map).Build(); _scheduler.ListenerManager.AddJobListener(new JobListener(jobView.Id, JobWasExecuteCallBack), KeyMatcher <JobKey> .KeyEquals(new JobKey(jobView.Id))); if (!jobView.IsSimple) { if (!ValidExpression(jobView.CronExpression)) { throw new Exception("cron表达式验证失败"); } var trigger = new CronTriggerImpl { CronExpressionString = jobView.CronExpression, Name = jobView.Name, Key = new TriggerKey(jobView.Id), Description = jobView.Remark }; if (jobView.StartTime.HasValue) { trigger.StartTimeUtc = Utils.ConvertToDateTimeOffset(jobView.StartTime.Value); } if (jobView.EndTime.HasValue) { trigger.EndTimeUtc = Utils.ConvertToDateTimeOffset(jobView.EndTime.Value); } await _scheduler.ScheduleJob(job, trigger); } else { var triggerBuilder = TriggerBuilder.Create().WithIdentity(jobView.Id).WithSimpleSchedule(x => x.WithRepeatCount(jobView.RepeatCount).WithInterval(TimeSpan.FromSeconds(jobView.IntervalSeconds))); if (jobView.StartTime.HasValue) { var start = Utils.ConvertToDateTimeOffset(jobView.StartTime.Value); triggerBuilder = triggerBuilder.StartAt(start); } if (jobView.EndTime.HasValue) { var end = Utils.ConvertToDateTimeOffset(jobView.EndTime.Value); triggerBuilder = triggerBuilder.EndAt(end); } var trigger = triggerBuilder.Build(); await _scheduler.ScheduleJob(job, trigger); } _logger.Info($"job [{jobView.Id}]{jobView.Name} start success"); }