Пример #1
0
        internal static async Task <IWorkflow> RunWorkflowAsync(this IWorkflow workflow, Step step)
        {
            FatalException.ArgumentNullException(workflow, nameof(workflow));
            FatalException.ArgumentNullException(step, nameof(step));

            do
            {
                if (step == null || workflow == null)
                {
                    break;
                }
                var previousBuffer = step;
                workflow.WorkflowStatus.Current.Step     = step;
                workflow.WorkflowStatus.Current.Workflow = workflow;

                workflow = await step.RunAsync(workflow);

                if (workflow == null)
                {
                    break;
                }
                workflow.WorkflowStatus.Previous.Step     = previousBuffer;
                workflow.WorkflowStatus.Previous.Workflow = workflow.Clone();
                step = workflow.WorkflowStatus.Next;
            }while (!(step?.StepSettings?.ExitFromFlow ?? false));

            return(workflow);
        }