Improve Flowchart activity
Only complete itself if there are no more direct children to schedule.
This commit is contained in:
parent
2fbc6d748c
commit
a9e84efa22
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue