/// <summary> /// 触发任务 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task <object> HandleRun(HttpContext context) { var res = ReturnT.Success(); try { var jobInfo = await context.Request.FromBody <JobRunRequest>(); //_logger.LogInformation($"--------------触发任务{JsonUtils.ToJson(jobInfo)}--------------"); //获取jobhandler并执行 var jobHandler = _jobHandlerManage.GetJobHandler(jobInfo.executorHandler); if (jobHandler == null) { throw new Exception($"没有对应的JobHandler,{jobInfo.executorHandler}"); } //处理执行器策略 默认是串行执行 Enum.TryParse(jobInfo.executorBlockStrategy, out ExecutorBlockStrategy blockStrategy); if (blockStrategy == ExecutorBlockStrategy.DISCARD_LATER) //如果有积压任务,丢弃当前任务 { if (_xxlJobExecutor.IsRunningOrHasQueue(jobInfo.jobId)) { return(ReturnT.Failed("终止任务[执行策略: DISCARD_LATER]")); } } else if (blockStrategy == ExecutorBlockStrategy.COVER_EARLY) //覆盖之前调度 负载之前积压的任务 { if (_xxlJobExecutor.IsRunningOrHasQueue(jobInfo.jobId)) { _xxlJobExecutor.KillJob(jobInfo.jobId, "终止任务[执行策略:COVER_EARLY]"); //停止该jogid对应的所有积压的任务(已经在执行中的就停止不了) } } await AsyncExecuteJob(jobInfo, jobHandler); } catch (Exception ex) { res = ReturnT.Failed(ex.StackTrace + "————" + ex.Message); _logger.LogError(ex, "xxljob触发任务错误"); } return(res); }