internal override async Task Processing(TTData data, EventTaskResp <TTRes> taskResp) { // 【1】 执行起始方法 附加校验 var checkRes = RunCheck(taskResp.meta); if (!checkRes) { return; } do { var doResp = await Do(data, taskResp.loop_times, taskResp.tried_times); doResp.SetToTaskResp(taskResp); // 判断是否失败回退 if (doResp.run_status.IsFailed() && (taskResp.meta.revert_effect == RevertEffect.RevertSelf || taskResp.meta.revert_effect == RevertEffect.RevertSelf)) { await Revert(data); taskResp.has_reverted = true; } // 【3】 执行结束方法 await ProcessEnd(data, taskResp); taskResp.loop_times++; } while (taskResp.run_status.IsFailed() && taskResp.loop_times <= taskResp.meta.loop_times); }
// 根据任务结果格式化当前节点结果, 外部循环使用 // 群组内的任务结果只能是成功或失败 internal static GroupExecuteStatus FormatEffectStatus <TTRes>(EventTaskResp <TTRes> taskResp) //where TTRes : class, new() { if (taskResp.meta.failed_effect != FailedEffect.FailedGroup || taskResp.run_status.IsCompleted()) { return(GroupExecuteStatus.Complete); } if (taskResp.meta.revert_effect == RevertEffect.RevertGroup) { return(GroupExecuteStatus.Failed | GroupExecuteStatus.Revert); } return(GroupExecuteStatus.Failed); }
/// <summary> /// 保存对应运行请求和重试相关信息 /// 【仅在 OwnerType = OwnerType.Task 时发生】 /// 节点下的环境信息,由节点内部处理,防止节点其他耗时任务造成执行过程中发起重试操作 /// </summary> /// <param name="data"></param> /// <param name="taskResp"></param> /// <returns></returns> protected virtual Task SaveTaskContext(TTData data, EventTaskResp <TTRes> taskResp) { return(Task.CompletedTask); }