Wrap the user_task_in _main_process in a embedded subprocess, with a boundary-event on it, with "cancelActivity=true". Have the successfull async subprocess trigger that boundary-event (e.g.. signal). When the boundary-event is intercepted, the scope will be destroyed and all scopes (subprocesses) in it are as well.
Another solution is, in case all the async-subprocesses are the same, to use a multi-instance subprocess (parallel). Put a completion-condition on the multi-instance that is met when one of the subprocesses ends. if one of them ends, the "multi-instance" will end and destroy all other subprocesses part of this multi-instance