I highly recommend looking at Go. That's the whole language build around coroutines, but that is actually its weak spot too. Like the core primitives in Go don't support cancellation, so you have to always remember to carry around your cancelation (done) channel and dare your forget selecting on it all the time.