You can replace this "by lazy" code
val lazyValue by lazy { runBlocking { getValue() } }
// usage: if (...) lazyValue else ...
with this:
val deferredValue = async(start = CoroutineStart.LAZY) { getValue() }
// usage: if (...) deferredValue.await() else ...