diff --git a/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs b/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs index ceae56077..c57964cc7 100644 --- a/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs +++ b/src/modules/Elsa.Workflows.Core/Contexts/ActivityExecutionContext.cs @@ -177,6 +177,11 @@ public partial class ActivityExecutionContext : IExecutionContext, IDisposable } } + public IDisposable EnterExecution() + { + return new WorkflowExecutionState(this); + } + /// /// Sets the current status of the activity. /// diff --git a/src/modules/Elsa.Workflows.Core/Middleware/Activities/DefaultActivityInvokerMiddleware.cs b/src/modules/Elsa.Workflows.Core/Middleware/Activities/DefaultActivityInvokerMiddleware.cs index 0912b677e..ca430fb5f 100644 --- a/src/modules/Elsa.Workflows.Core/Middleware/Activities/DefaultActivityInvokerMiddleware.cs +++ b/src/modules/Elsa.Workflows.Core/Middleware/Activities/DefaultActivityInvokerMiddleware.cs @@ -48,10 +48,9 @@ public class DefaultActivityInvokerMiddleware(ActivityMiddlewareDelegate next, I context.AddExecutionLogEntry("Precondition Failed", "Cannot execute at this time"); return; } - + // Mark workflow and activity as executing. - context.WorkflowExecutionContext.IsExecuting = true; - context.IsExecuting = true; + using var executionState = context.EnterExecution(); // Conditionally commit the workflow state. if (ShouldCommit(context, ActivityLifetimeEvent.ActivityExecuting)) @@ -87,10 +86,6 @@ public class DefaultActivityInvokerMiddleware(ActivityMiddlewareDelegate next, I workflowExecutionContext.Bookmarks.AddRange(context.Bookmarks); logger.LogDebug("Added {BookmarkCount} bookmarks to the workflow execution context", context.Bookmarks.Count); } - - // Mark activity as executed. - context.IsExecuting = false; - context.WorkflowExecutionContext.IsExecuting = false; // Conditionally commit the workflow state. if (ShouldCommit(context, ActivityLifetimeEvent.ActivityExecuted)) @@ -151,8 +146,8 @@ public class DefaultActivityInvokerMiddleware(ActivityMiddlewareDelegate next, I { var workflowStrategyName = context.WorkflowExecutionContext.Workflow.Options.CommitStrategyName; var workflowStrategy = string.IsNullOrWhiteSpace(workflowStrategyName) ? null : commitStrategyRegistry.FindWorkflowStrategy(workflowStrategyName); - - if(workflowStrategy == null) + + if (workflowStrategy == null) return false; var workflowLifetimeEvent = lifetimeEvent == ActivityLifetimeEvent.ActivityExecuting ? WorkflowLifetimeEvent.ActivityExecuting : WorkflowLifetimeEvent.ActivityExecuted;