Thanks. That is one valid approach. There’s actually another approach to cancel handler propagation, albeit more implcit (so I’m not sure if that is better). The idea is to install cancel-aware dispatcher to a coroutine. This dispatcher will check if the coroutine was cancelled on every resume and will resume with exception if it was. Now that is only a partial solution, because you still have to have cancel-aware asyncGenerate implementation. Because we’re installing cancelling dispatcher we can make a single implementation of asyncGenerate-like construct that works both with cancellable and non-cancellable coroutines.