diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs index e7bd00c61..14c822cd2 100644 --- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs @@ -94,14 +94,10 @@ namespace Elsa.Services.Models public IActivityBlueprint? GetActivityBlueprintById(string id) => WorkflowBlueprint.Activities.FirstOrDefault(x => x.Id == id); public IActivityBlueprint? GetActivityBlueprintByName(string name) => WorkflowBlueprint.Activities.FirstOrDefault(x => x.Name == name); - public void SchedulePostActivities() + public void SchedulePostActivity() { - var activities = WorkflowInstance.PostScheduledActivities.Reverse(); - - foreach (var activity in activities) - ScheduleActivity(activity); - - WorkflowInstance.PostScheduledActivities.Clear(); + var activity = WorkflowInstance.PostScheduledActivities.Pop(); + ScheduleActivity(activity); } public object? GetOutputFrom(string activityName) diff --git a/src/core/Elsa.Core/Services/WorkflowRunner.cs b/src/core/Elsa.Core/Services/WorkflowRunner.cs index 22cda1f96..95ba74600 100644 --- a/src/core/Elsa.Core/Services/WorkflowRunner.cs +++ b/src/core/Elsa.Core/Services/WorkflowRunner.cs @@ -286,15 +286,13 @@ namespace Elsa.Services activityOperation = Execute; workflowExecutionContext.CompletePass(); + // Exit execution loop if workflow has any other status than Running (i.e. Suspended). Otherwise continue the loop. + if (workflowExecutionContext.Status != WorkflowStatus.Running) + break; + // If there are no more scheduled activities, schedule any post-scheduled activities. if (!workflowExecutionContext.HasScheduledActivities && workflowExecutionContext.HasPostScheduledActivities) - { - workflowExecutionContext.SchedulePostActivities(); - - // Exit execution loop if workflow has any other status than Running (i.e. Suspended). Otherwise continue the loop. - if (workflowExecutionContext.Status != WorkflowStatus.Running) - break; - } + workflowExecutionContext.SchedulePostActivity(); } if (workflowExecutionContext.HasBlockingActivities)