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