private async Task <RunWorkflowResult> BeginWorkflow(WorkflowExecutionContext workflowExecutionContext, IActivityBlueprint?activity, CancellationToken cancellationToken) { if (activity == null) { activity = _startingActivitiesProvider.GetStartActivities(workflowExecutionContext.WorkflowBlueprint).FirstOrDefault() ?? workflowExecutionContext.WorkflowBlueprint.Activities.First(); } try { if (!await CanExecuteAsync(workflowExecutionContext, activity, false, cancellationToken)) { return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, false)); } workflowExecutionContext.Begin(); workflowExecutionContext.ScheduleActivity(activity.Id); await RunAsync(workflowExecutionContext, Execute, cancellationToken); return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, true)); } catch (Exception e) { _logger.LogWarning(e, "Failed to run workflow {WorkflowInstanceId}", workflowExecutionContext.WorkflowInstance.Id); workflowExecutionContext.Fault(e, null, null, false); } return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, false)); }
private async Task <RunWorkflowResult> BeginWorkflow(WorkflowExecutionContext workflowExecutionContext, IActivityBlueprint?activity, CancellationToken cancellationToken) { if (activity == null) { activity = _startingActivitiesProvider.GetStartActivities(workflowExecutionContext.WorkflowBlueprint).FirstOrDefault() ?? workflowExecutionContext.WorkflowBlueprint.Activities.First(); } try { if (!await CanExecuteAsync(workflowExecutionContext, activity, false, cancellationToken)) { return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, null, false)); } var currentStatus = workflowExecutionContext.WorkflowInstance.WorkflowStatus; workflowExecutionContext.Begin(); workflowExecutionContext.ScheduleActivity(activity.Id); await _mediator.Publish(new WorkflowStatusChanged(workflowExecutionContext.WorkflowInstance, workflowExecutionContext.WorkflowInstance.WorkflowStatus, currentStatus), cancellationToken); await RunCoreAsync(workflowExecutionContext, Execute, cancellationToken); return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity?.Id, null, true)); } catch (Exception e) { _logger.LogWarning(e, "Failed to run workflow {WorkflowInstanceId}", workflowExecutionContext.WorkflowInstance.Id); workflowExecutionContext.Fault(e, activity?.Id, null, false); if (activity != null) { workflowExecutionContext.AddEntry(activity, "Faulted", null, SimpleException.FromException(e)); } return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity?.Id, e, false)); } }
private async Task <RunWorkflowResult> BeginWorkflow(WorkflowExecutionContext workflowExecutionContext, IActivityBlueprint?activity, CancellationToken cancellationToken) { if (activity == null) { activity = _startingActivitiesProvider.GetStartActivities(workflowExecutionContext.WorkflowBlueprint).FirstOrDefault() ?? workflowExecutionContext.WorkflowBlueprint.Activities.First(); } if (!await CanExecuteAsync(workflowExecutionContext, activity, false, cancellationToken)) { return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, false)); } workflowExecutionContext.Begin(); workflowExecutionContext.ScheduleActivity(activity.Id); await RunAsync(workflowExecutionContext, Execute, cancellationToken); return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, true)); }