My problem is word-for-word identical to this question asked 7 years ago in every way, so I will just link it rather than repeating after them:
Workflow splits into multiple branches, each containing a user task. After any of the tasks is completed, all other should be closed. Whats the cleanest way to achieve this, preferably only in BPMN diagram and not closing the tasks in Java code?
My current approach is to always use a subprocess to collect the branches in , because then I can use a “terminate end event” inside it
There are different options for this problem. It all depends on what you want to express (semantically).
Personally, I see the two branches as a unit, which can be wrapped into a subprocess. So my suggestion is very similar to the one proposed in the Stackoverflow post:
And this seems to be what you’re already doing. So, what do you dislike about this solution?
I was hoping there was some kind of gateway/property that accomplishes this, I used the subprocess because I had no other way. Ideal solution would be a gateway that accepts first branch and terminates others.
But if you think using subprocess+terminate is the best whenever there’s branches that need to be killed, I’ll use that approach too.
Vaguely related: It’s a shame this was never implemented
A Signal Event per definition broadcasts to all Process Instances, anything else would be a violation of the BPMN Standard.
Similarly, the gateways that you describe do not exist in the BPMN standard.
That being said, I believe that a subprocess with boundary events or termination end events are the best way to kill a branch, The behavior is easy to comprehend and can be changed to more than two branches without adding too much clutter to the model.