Aync codes like threaded codes are different from the simple sync code. These different style coding are there to take advantage of the concurrent benefit of the system. Developers with simple single flow control code background often complain about the extra flow control complexity when it's outside of their comfort zone. Think of it as a level up on your skill.
There are libraries out there that add syntactic sugar to make async code look like sync code. Like,
group (
asyncfunc1()
asyncfunc2()
asyncfunc3()
)