Когда асинхронную запрашиваем операцию, корутина (не обязательно плюсовая) сохраняет своё состояние и делает выход, пул приступает к следующей корутине, когда асинхронная операция завершается, первая корутина снова отправляется в пул на исполнение, с того места где завершилась. Пока этот контракт поддерживается всё хорошо
Ну как ты делаешь это без своих примитивов? У тебя же обычно все примитивы блокирующие