Refactor activity execution state handling with IDisposable

Introduce `EnterExecution` method to manage activity execution state using a `using` block for cleaner and safer resource handling. Removed manual flags for tracking execution state, streamlining workflow logic and improving maintainability.
This commit is contained in:
Sipke Schoorstra 2025-03-15 20:01:02 +01:00
parent 62da3c8618
commit ba08d97b38
No known key found for this signature in database
GPG key ID: 5C10502B28A4268F
2 changed files with 9 additions and 9 deletions

View file

@ -177,6 +177,11 @@ public partial class ActivityExecutionContext : IExecutionContext, IDisposable
}
}
public IDisposable EnterExecution()
{
return new WorkflowExecutionState(this);
}
/// <summary>
/// Sets the current status of the activity.
/// </summary>

View file

@ -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;