We’ll break down why you can’t call
suspend functions directly from a regular
main, how
runBlocking works as a “bridge” into the coroutine world, and why it honestly
blocks the thread. We add the
kotlinx.coroutines dependency, build the right style: a single
runBlocking at the entry point and a chain of
suspend scenarios (for example,
runApp), plus a practical example of loading data and producing a report.