Nodes with the "async" attribute set to "true" or "exclusive" are executed asynchronously, but they are still entered in the current transaction - see Node.enter(). The observed behavior is as expected. If the token remained in the success-node after an exception thrown during execution of the exception-node, it would indicate the success-node is still in progress, yet it is not. The success-node has completed successfully and the execution is stalled at the exception-node.