I don't get it. How is this different than using standard Java ExecutorService & co features?
The best I can tell is that coroutines are a bit lighter weight (in terms of what state is managed) and have a bit simpler usage out-of-the-box.
But I've not used them myself so maybe I'm not seeing how big of advantage those are or perhaps there's more to it than that?
The point (I think) was as an exercise to demonstrate it was possible to implement in 'userland' and how they did so.