diff --git a/src/core/Elsa.Core/Activities/Container.cs b/src/core/Elsa.Core/Activities/Container.cs
index df84ad7ca..bdefba3ce 100644
--- a/src/core/Elsa.Core/Activities/Container.cs
+++ b/src/core/Elsa.Core/Activities/Container.cs
@@ -36,6 +36,9 @@ public abstract class Container : Activity, IContainer
// Schedule children.
await ScheduleChildrenAsync(context);
+
+ // Because we override ExecuteAsync, this activity will not automatically complete.
+ // Instead, it's up to the derived classes to explicitly complete this activity.
}
protected virtual async ValueTask OnChildActivityCompletedAsync(ActivityCompleted signal, SignalContext context)
diff --git a/src/core/Elsa.Core/Activities/Sequence.cs b/src/core/Elsa.Core/Activities/Sequence.cs
index 4c39ebc08..71d36fe42 100644
--- a/src/core/Elsa.Core/Activities/Sequence.cs
+++ b/src/core/Elsa.Core/Activities/Sequence.cs
@@ -2,7 +2,6 @@ using System.ComponentModel;
using Elsa.Attributes;
using Elsa.Contracts;
using Elsa.Models;
-using Elsa.Signals;
namespace Elsa.Activities;
@@ -36,7 +35,7 @@ public class Sequence : Container
if (currentIndex >= childActivities.Count)
{
- await context.SignalAsync(new ActivityCompleted());
+ await context.CompleteActivityAsync();
return;
}
diff --git a/src/core/Elsa.Core/Models/Activity.cs b/src/core/Elsa.Core/Models/Activity.cs
index db3d520c5..d6af43c7c 100644
--- a/src/core/Elsa.Core/Models/Activity.cs
+++ b/src/core/Elsa.Core/Models/Activity.cs
@@ -20,13 +20,7 @@ public abstract class Activity : ISignalHandler
protected virtual async ValueTask ExecuteAsync(ActivityExecutionContext context)
{
Execute(context);
- await OnExecutedAsync(context);
- }
-
- protected virtual async ValueTask OnExecutedAsync(ActivityExecutionContext context)
- {
- // By default, signal that the activity is completed.
- await context.SignalAsync(new ActivityCompleted());
+ await CompleteAsync(context);
}
protected virtual ValueTask OnSignalReceivedAsync(object signal, SignalContext context)
@@ -43,9 +37,17 @@ public abstract class Activity : ISignalHandler
{
}
+ ///
+ /// Notify the sytem that this activity completed.
+ ///
+ protected async ValueTask CompleteAsync(ActivityExecutionContext context)
+ {
+ await context.CompleteActivityAsync();
+ }
+
protected void OnSignalReceived(Type signalType, Func