diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs
index 82d906973..1b034c36d 100644
--- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs
+++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
@@ -71,6 +72,36 @@ namespace Elsa.Services.Models
public bool HasBlockingActivities => WorkflowInstance.BlockingActivities.Any();
public object? WorkflowContext { get; set; }
+ ///
+ /// A collection of tasks to execute post-workflow burst execution.
+ ///
+ public IDictionary>> Tasks { get; set; } = new Dictionary>>();
+
+ public void RegisterTask(string groupName, Func task)
+ {
+ if (!Tasks.ContainsKey(groupName))
+ {
+ var list = new List> { task };
+ Tasks[groupName] = list;
+ }
+ else
+ {
+ Tasks[groupName].Add(task);
+ }
+ }
+
+ public IEnumerable> GetRegisteredTasks(string groupName) => Tasks.ContainsKey(groupName) ? Tasks[groupName] : Enumerable.Empty>();
+
+ public async ValueTask ExecuteRegisteredTasksAsync(string groupName, CancellationToken cancellationToken = default)
+ {
+ var tasks = GetRegisteredTasks(groupName);
+
+ foreach (var task in tasks)
+ await task(this, cancellationToken);
+
+ Tasks.Remove(groupName);
+ }
+
public void SetVariable(string name, object? value) => WorkflowInstance.Variables.Set(name, value);
public T? GetVariable(string name) => WorkflowInstance.Variables.Get(name);
public object? GetVariable(string name) => WorkflowInstance.Variables.Get(name);
@@ -100,9 +131,9 @@ namespace Elsa.Services.Models
return activityInstance.Output;
}
- public T GetOutputFrom(string activityName) => (T)GetOutputFrom(activityName)!;
+ public T GetOutputFrom(string activityName) => (T) GetOutputFrom(activityName)!;
public void SetWorkflowContext(object? value) => WorkflowContext = value;
- public T GetWorkflowContext() => (T)WorkflowContext!;
+ public T GetWorkflowContext() => (T) WorkflowContext!;
public async ValueTask> ActivateActivitiesAsync(CancellationToken cancellationToken = default)
{