Good to see that you came to a similar implementation.
I like the explicit cancellation handler. In my use cases it's not really needed because cancellation would resume the continuation and the code following the await handles all situations similarly. But it's nice to have access to it in the closure when setting up an unstructured task like this.