diff --git a/src/core/Elsa.Core/Activities/For.cs b/src/core/Elsa.Core/Activities/For.cs index 75f09634b..7d96426a8 100644 --- a/src/core/Elsa.Core/Activities/For.cs +++ b/src/core/Elsa.Core/Activities/For.cs @@ -20,7 +20,7 @@ public class For : Activity [JsonConstructor] public For() { - OnSignalReceived(OnBreak); + OnSignalReceived(OnBreakAsync); } public For(int start, int end, ForOperator forOperator = ForOperator.LessThanOrEqual) : this() @@ -37,6 +37,8 @@ public class For : Activity [Outbound] public IActivity? Body { get; set; } public Variable CurrentValue { get; set; } = new(); + protected override bool CompleteImplicitly { get; } = false; + protected override void Execute(ActivityExecutionContext context) { var iterateNode = Body; @@ -84,8 +86,15 @@ public class For : Activity return ValueTask.CompletedTask; } - private void OnBreak(BreakSignal signal, SignalContext context) + private async ValueTask OnBreakAsync(BreakSignal signal, SignalContext context) { + // Prevent bubbling. context.StopPropagation(); + + // Remove child activity execution contexts. + context.ActivityExecutionContext.RemoveChildren(); + + // Mark this activity as completed. + await context.ActivityExecutionContext.CompleteActivityAsync(); } } \ No newline at end of file