diff --git a/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledCronTask.cs b/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledCronTask.cs
index dcaf25ae7..180d60713 100644
--- a/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledCronTask.cs
+++ b/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledCronTask.cs
@@ -10,7 +10,7 @@ namespace Elsa.Scheduling.ScheduledTasks;
///
/// A task that is scheduled using a given cron expression.
///
-public class ScheduledCronTask : IScheduledTask
+public class ScheduledCronTask : IScheduledTask, IDisposable
{
private readonly ISystemClock _systemClock;
private readonly ILogger _logger;
@@ -97,4 +97,10 @@ public class ScheduledCronTask : IScheduledTask
if (!cancellationToken.IsCancellationRequested) Schedule();
};
}
+
+ void IDisposable.Dispose()
+ {
+ _timer?.Dispose();
+ _cancellationTokenSource.Dispose();
+ }
}
\ No newline at end of file
diff --git a/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledRecurringTask.cs b/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledRecurringTask.cs
index 95331417c..9a2dde7a4 100644
--- a/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledRecurringTask.cs
+++ b/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledRecurringTask.cs
@@ -9,7 +9,7 @@ namespace Elsa.Scheduling.ScheduledTasks;
///
/// A scheduled recurring task.
///
-public class ScheduledRecurringTask : IScheduledTask
+public class ScheduledRecurringTask : IScheduledTask, IDisposable
{
private readonly ITask _task;
private readonly ISystemClock _systemClock;
@@ -87,4 +87,10 @@ public class ScheduledRecurringTask : IScheduledTask
if (!cancellationToken.IsCancellationRequested) Schedule();
};
}
+
+ void IDisposable.Dispose()
+ {
+ _cancellationTokenSource.Dispose();
+ _timer?.Dispose();
+ }
}
diff --git a/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledSpecificInstantTask.cs b/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledSpecificInstantTask.cs
index 3a4604cc3..1ec49bfb5 100644
--- a/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledSpecificInstantTask.cs
+++ b/src/modules/Elsa.Scheduling/ScheduledTasks/ScheduledSpecificInstantTask.cs
@@ -9,7 +9,7 @@ namespace Elsa.Scheduling.ScheduledTasks;
///
/// A task that is scheduled to execute at a specific instant.
///
-public class ScheduledSpecificInstantTask : IScheduledTask
+public class ScheduledSpecificInstantTask : IScheduledTask, IDisposable
{
private readonly ITask _task;
private readonly ISystemClock _systemClock;
@@ -58,4 +58,10 @@ public class ScheduledSpecificInstantTask : IScheduledTask
await commandSender.SendAsync(new RunScheduledTask(_task), cancellationToken);
};
}
+
+ void IDisposable.Dispose()
+ {
+ _cancellationTokenSource.Dispose();
+ _timer?.Dispose();
+ }
}
\ No newline at end of file
diff --git a/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs b/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs
index 35b07b055..9d24cae08 100644
--- a/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs
+++ b/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs
@@ -17,7 +17,7 @@ namespace Elsa.Workflows;
/// Represents the context of an activity execution.
///
[PublicAPI]
-public partial class ActivityExecutionContext : IExecutionContext
+public partial class ActivityExecutionContext : IExecutionContext, IDisposable
{
private readonly ISystemClock _systemClock;
private readonly List _bookmarks = new();
@@ -676,4 +676,10 @@ public partial class ActivityExecutionContext : IExecutionContext
{
return ExpressionExecutionContext.TryGetBlock(locationBlockReference, out var memoryBlock) ? memoryBlock : default;
}
+
+ void IDisposable.Dispose()
+ {
+ _cancellationRegistration.Dispose();
+ _cancellationTokenSource.Dispose();
+ }
}
\ No newline at end of file