Improve Flowchart activity

Only complete itself if there are no more direct children to schedule.
This commit is contained in:
Sipke Schoorstra 2022-06-03 13:46:13 +02:00
parent 2fbc6d748c
commit a9e84efa22

View file

@ -12,7 +12,7 @@ public class Flowchart : Container
{
public Flowchart()
{
OnSignalReceived<ActivityCompleted>(OnDescendantCompleted);
OnSignalReceived<ActivityCompleted>(OnDescendantCompletedAsync);
}
[Node] public IActivity? Start { get; set; }
@ -26,19 +26,28 @@ public class Flowchart : Container
context.ScheduleActivity(Start);
}
private void OnDescendantCompleted(ActivityCompleted signal, SignalContext context)
private async ValueTask OnDescendantCompletedAsync(ActivityCompleted signal, SignalContext context)
{
ScheduleChildren(context.ActivityExecutionContext, context.SourceActivityExecutionContext.Activity);
await ScheduleChildrenAsync(context.ActivityExecutionContext, context.SourceActivityExecutionContext.Activity);
}
private void ScheduleChildren(ActivityExecutionContext context, IActivity parent)
private async Task ScheduleChildrenAsync(ActivityExecutionContext context, IActivity parent)
{
if (parent == null!)
return;
// Is the activity a direct child?
var isDirectChild = Activities.Contains(parent);
if (!isDirectChild)
return;
var outboundConnections = Connections.Where(x => x.Source == parent).ToList();
var children = outboundConnections.Select(x => x.Target).ToList();
context.ScheduleActivities(children);
if(children.Any())
context.ScheduleActivities(children);
else
await context.CompleteActivityAsync();
}
}