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); }