I don't know, I'm not convinced with this argument.

The "ugly" version with the switch seems much preferable to me. It's simple, works, has way less moving parts and does not require complex machinery to be built into the language. I'm open to being convinced otherwise but as it stands I'm not seeing any horrible problems with it.

Switch is fine until you hit five or six states with cleanup in each branch. Then it's just a worse version of what coroutines give you for free.