private async Task <RunWorkflowResult> ResumeWorkflowAsync(WorkflowExecutionContext workflowExecutionContext, IActivityBlueprint activity, CancellationToken cancellationToken) { try { if (!await CanExecuteAsync(workflowExecutionContext, activity, true, cancellationToken)) { return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, null, false)); } var blockingActivities = workflowExecutionContext.WorkflowInstance.BlockingActivities.Where(x => x.ActivityId == activity.Id).ToList(); foreach (var blockingActivity in blockingActivities) { await workflowExecutionContext.RemoveBlockingActivityAsync(blockingActivity); } var currentStatus = workflowExecutionContext.WorkflowInstance.WorkflowStatus; workflowExecutionContext.Resume(); workflowExecutionContext.ScheduleActivity(activity.Id); await _mediator.Publish(new WorkflowStatusChanged(workflowExecutionContext.WorkflowInstance, workflowExecutionContext.WorkflowInstance.WorkflowStatus, currentStatus), cancellationToken); await RunCoreAsync(workflowExecutionContext, Resume, 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); workflowExecutionContext.AddEntry(activity, "Faulted", null, SimpleException.FromException(e)); return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activity.Id, e, false)); } }
private async Task <RunWorkflowResult> ResumeWorkflowAsync(WorkflowExecutionContext workflowExecutionContext, IActivityBlueprint activityBlueprint, CancellationToken cancellationToken) { if (!await CanExecuteAsync(workflowExecutionContext, activityBlueprint, true, cancellationToken)) { return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activityBlueprint.Id, false)); } var blockingActivities = workflowExecutionContext.WorkflowInstance.BlockingActivities.Where(x => x.ActivityId == activityBlueprint.Id).ToList(); foreach (var blockingActivity in blockingActivities) { await workflowExecutionContext.RemoveBlockingActivityAsync(blockingActivity); } workflowExecutionContext.Resume(); workflowExecutionContext.ScheduleActivity(activityBlueprint.Id); await RunAsync(workflowExecutionContext, Resume, cancellationToken); return(new RunWorkflowResult(workflowExecutionContext.WorkflowInstance, activityBlueprint.Id, true)); }