You may be able to work around ASIO’s yield token by exploiting the token protocol, but as soon as you try to implement join() or sync primitives that work across different strands you’ll have a hard time.