Optimize activity execution contexts filtering

Removed manual removal of child contexts from the list of active activity execution contexts. Replaced it with more efficient direct filtering of not completed activity execution contexts. This change may affect scripts that access activity output directly, but a variable capturing workaround is provided.
This commit is contained in:
Sipke Schoorstra 2024-02-02 21:38:51 +01:00
parent e5de5934e6
commit 6b2eea3502

View file

@ -253,14 +253,9 @@ public class WorkflowStateExtractor : IWorkflowStateExtractor
private static IEnumerable<ActivityExecutionContext> GetActiveActivityExecutionContexts(IEnumerable<ActivityExecutionContext> activityExecutionContexts)
{
var contexts = activityExecutionContexts.ToList();
// Remove all child contexts of completed contexts.
foreach (var context in contexts.ToList().Where(context => context.IsCompleted))
{
contexts.RemoveAll(x => x.ParentActivityExecutionContext == context);
}
return contexts;
// Filter out completed activity execution contexts.
// This will currently break scripts accessing activity output directly, but there's a workaround for that via variable capturing.
// We may ultimately restore direct output access, but in a different way.
return activityExecutionContexts.Where(x => !x.IsCompleted).ToList();
}
}