Я с корутинами (и вообще котлином) не работал. Но интересно, как у такого кода дела с дебагом (например, поставить брикпоинты и идти по коду построчно), со стектрейсами (не становится ли стектрейс total mess, в котором ничего не понять) и т.п. Ведь по факту-то код лишь притворяется императивным, а сам все еще асинхронный. :)
Для джавы, кстати, тоже есть либа (
https://github.com/electronicarts/ea-async), позволяющая писать асинхронный код синхронно через примитивы async/await, которые эта либа эмулирует с помощью java agent instrumentation. Но ее я тоже не пробовал.