So why is asynchronous continuation needed to make the "Generate invoice" independent to "Provide shipping address"?
In a synchronous behavior the transaction spans over multiple stable states to the next waiting state:
user taks -> on complition begin TX-1 -> execute multiple stable states like synchronous service tasks -> commit TX-1 -> entering the next waiting state.
In case of a rollback the the whole user task would be rolled-back also and the process instance would not be saved to the database at all.
In a asynchronous behavior the transaction ends at the beginning of an asynchronous service task for example:
user taks -> on complition begin TX-1 -> commit TX-1 -> begin TX-2 -> execute asynchronous service task -> commit TX-2 -> entering the next waiting state.
In case of a rollback of TX-2 the service task of TX-1 would still be saved to the database.
In case of a rollback the the whole user task would be rolled-back also and the process instance would not be saved to the database at all.
I missunderstood something by reading the following sentence:
"In case of Exceptions the state is rolled back to the last persistent wait state of the process instance. It might even mean that the process instance will never be created!" [1]