Пример #1
0
        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);
        }
Пример #2
0
        // 根据任务结果格式化当前节点结果, 外部循环使用
        // 群组内的任务结果只能是成功或失败
        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);
        }
Пример #3
0
 /// <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);
 }