Update Break behavior to also handle "CompleteComposite" signal
This commit is contained in:
parent
4faf40b3ae
commit
e2cea7310f
|
|
@ -15,6 +15,19 @@ public class BreakBehavior : Behavior
|
|||
public BreakBehavior(IActivity owner) : base(owner)
|
||||
{
|
||||
OnSignalReceived<BreakSignal>(OnBreakAsync);
|
||||
OnSignalReceived<CompleteCompositeSignal>(OnCompleteCompositeAsync);
|
||||
}
|
||||
|
||||
private async ValueTask OnCompleteCompositeAsync(CompleteCompositeSignal signal, SignalContext context)
|
||||
{
|
||||
// Cancel each descendant to clear bookmarks and cancel jobs etc.
|
||||
await CancelDescendantsAsync(context);
|
||||
|
||||
// Remove child activity execution contexts.
|
||||
await context.ReceiverActivityExecutionContext.RemoveChildrenAsync();
|
||||
|
||||
// Mark this activity as completed.
|
||||
await context.ReceiverActivityExecutionContext.CompleteActivityAsync();
|
||||
}
|
||||
|
||||
private async ValueTask OnBreakAsync(BreakSignal signal, SignalContext context)
|
||||
|
|
@ -23,11 +36,7 @@ public class BreakBehavior : Behavior
|
|||
context.StopPropagation();
|
||||
|
||||
// Cancel each descendant to clear bookmarks and cancel jobs etc.
|
||||
var descendants = context.ReceiverActivityExecutionContext.ActivityNode.Descendants().Select(x => x.Activity).ToList();
|
||||
var workflowExecutionContext = context.SenderActivityExecutionContext.WorkflowExecutionContext;
|
||||
|
||||
foreach (var descendant in descendants)
|
||||
await workflowExecutionContext.CancelActivityAsync(descendant);
|
||||
await CancelDescendantsAsync(context);
|
||||
|
||||
// Remove child activity execution contexts.
|
||||
await context.ReceiverActivityExecutionContext.RemoveChildrenAsync();
|
||||
|
|
@ -35,4 +44,14 @@ public class BreakBehavior : Behavior
|
|||
// Mark this activity as completed.
|
||||
await context.ReceiverActivityExecutionContext.CompleteActivityAsync();
|
||||
}
|
||||
|
||||
private async Task CancelDescendantsAsync(SignalContext context)
|
||||
{
|
||||
var senderActivity = context.SenderActivityExecutionContext.Activity;
|
||||
var descendants = context.ReceiverActivityExecutionContext.ActivityNode.Descendants().Select(x => x.Activity).Where(x => x.Id != senderActivity.Id).ToList();
|
||||
var workflowExecutionContext = context.ReceiverActivityExecutionContext.WorkflowExecutionContext;
|
||||
|
||||
foreach (var descendant in descendants)
|
||||
await workflowExecutionContext.CancelActivityAsync(descendant);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue