Use virtual threads to write Vert.x code that looks like it is synchronous.
You still write the traditional Vert.x code with events, but you have the opportunity to write synchronous code for complex workflows and use thread locals in such workflows.