private Task RunTask(IActionContext actionContext, TaskDesc taskDesc, GroupInfo groupInfo) { bool isSubEntryAction = this.IsSubEntryGroup(taskDesc.TaskInfo.Action); if (!isSubEntryAction) { publishValueService.PublishVars(actionContext.Parameters, taskDesc.TaskInfo.Vars); } IExecuteContext executeContext = CreateExecuteContext(actionContext, taskDesc, isSubEntryAction); return(actionExecuterService.Execute(executeContext).ContinueWith((result) => { if (result.IsCompleted && result.Exception == null) { var executeResult = result.Result; this.PublishResultVars(actionContext, executeResult, taskDesc); PublishGlobalVars(actionContext, executeResult.IsSuccess, taskDesc); List <TaskDesc> nextTasks = GetNextTasks(actionContext, executeResult.IsSuccess, taskDesc, groupInfo); RunTasks(actionContext, nextTasks, groupInfo).Wait(); } else { throw WorkflowError.TaskEexcuteError(taskDesc.TaskName, result.Exception); } }, actionContext.Token, TaskContinuationOptions.None, TaskScheduler.Current)); }
private TaskDesc FindTaskInfo(string fromName, string taskName, GroupInfo groupInfo) { if (groupInfo.Tasks == null || !groupInfo.Tasks.ContainsKey(taskName)) { throw WorkflowError.TaskNameNotFound(taskName); } return(new TaskDesc() { FromName = fromName, TaskName = taskName, TaskInfo = groupInfo.Tasks[taskName] }); }