public Task Trigger(AixScheduleTaskInfo taskInfo, TimeSpan delay) { if (OnHandleMessage == null) { return(Task.CompletedTask); } //把线程队列引用过来,根据id进入不同的线程队列,保证串行执行 // _logger.LogDebug($"执行定时任务:{taskInfo.Id},{taskInfo.TaskName},{taskInfo.ExecutorParam}"); _taskExecutor.GetSingleThreadTaskExecutor(taskInfo.Id).Schedule(async(state) => { var innerTaskInfo = (AixScheduleTaskInfo)state; int logId = 0; try { logId = await SaveLog(innerTaskInfo); await OnHandleMessage(new ScheduleTaskContext { LogId = logId, TaskId = innerTaskInfo.Id, TaskName = innerTaskInfo.TaskName, TaskGroup = innerTaskInfo.TaskGroup, TaskContent = innerTaskInfo.TaskContent }); await UpdateTriggerCode(logId, OPStatus.Success, "success"); } catch (OperationCanceledException ex) { _logger.LogError(ex, "Aix.ScheduleTask任务取消"); await UpdateTriggerCode(logId, OPStatus.Fail, ex.Message); } catch (Exception ex) { _logger.LogError(ex, $"Aix.ScheduleTask定时任务执行出错 {innerTaskInfo.Id},{innerTaskInfo.TaskName},{innerTaskInfo.TaskContent}"); await UpdateTriggerCode(logId, OPStatus.Fail, ex.Message); } }, taskInfo, delay); return(Task.CompletedTask); }
/// <summary> /// /// </summary> /// <param name="list"></param> /// <param name="asyncExecute">是否异步执行</param> /// <returns></returns> private async Task ProcessList(StreamEntry[] list, bool asyncExecute) { foreach (var item in list) { if (_isStart == false) { return; //及时关闭 } JobData jobData = ParseJobData(item); if (asyncExecute) { //相同routeKey的任务进入同一个线程处理 _taskExecutor.GetSingleThreadTaskExecutor(jobData.RouteKey).Execute(async(state) => //进入本地多线程执行器中 { var thisObj = (WorkerProcess)state; await thisObj.HandleWrap(item, jobData); }, this); } else { await HandleWrap(item, jobData); } } }