diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs index 9106cd592..914042f8b 100644 --- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs @@ -32,6 +32,7 @@ namespace Elsa.Services.Models public IServiceProvider ServiceProvider { get; } public bool HasScheduledActivities => scheduledActivities.Any(); public bool HasScheduledHaltingActivities => scheduledHaltingActivities.Any(); + public IEnumerable ScheduledActivities => scheduledActivities; public bool IsFirstPass { get; set; } public LogEntry CurrentLogEntry => Workflow.ExecutionLog.LastOrDefault(); public WorkflowExecutionScope CurrentScope => Workflow.Scopes.Peek(); diff --git a/src/core/Elsa.Core/Services/WorkflowInvoker.cs b/src/core/Elsa.Core/Services/WorkflowInvoker.cs index 3d21cbda3..2180c42c4 100644 --- a/src/core/Elsa.Core/Services/WorkflowInvoker.cs +++ b/src/core/Elsa.Core/Services/WorkflowInvoker.cs @@ -94,8 +94,7 @@ namespace Elsa.Services CancellationToken cancellationToken = default) where T : IWorkflow, new() { var workflow = workflowFactory.CreateWorkflow(input, workflowInstance); - var startActivities = workflow.Activities.Find(startActivityIds); - return ExecuteAsync(workflow, true, startActivities, cancellationToken); + return ResumeAsync(workflow, startActivityIds, cancellationToken); } public async Task ResumeAsync( @@ -108,8 +107,19 @@ namespace Elsa.Services workflowInstance.DefinitionId, VersionOptions.SpecificVersion(workflowInstance.Version), cancellationToken); + var workflow = workflowFactory.CreateWorkflow(definition, input, workflowInstance); - return await ExecuteAsync(workflow, true, startActivityIds, cancellationToken); + return await ResumeAsync(workflow, startActivityIds, cancellationToken); + } + + public Task ResumeAsync( + Workflow workflow, + IEnumerable startActivityIds = default, + CancellationToken cancellationToken = default) + { + startActivityIds ??= workflow.BlockingActivities.Select(x => x.Id); + var startActivities = workflow.Activities.Find(startActivityIds); + return ExecuteAsync(workflow, true, startActivities, cancellationToken); } public async Task> TriggerAsync( @@ -419,7 +429,7 @@ namespace Elsa.Services if (workflowExecutionContext.HasScheduledActivities) { - workflow.BlockingActivities.RemoveWhere(startActivityList.Contains); + workflow.BlockingActivities.RemoveWhere(workflowExecutionContext.ScheduledActivities.Contains); if (workflowExecutionContext.Workflow.Status == WorkflowStatus.Idle) workflowExecutionContext.Start();