Coroutines let you write asynchronous, non-blocking code that looks clean and readable — no messy callbacks or thread juggling.
runBlocking starts the coroutine and blocks the main thread until it finishes.launch starts a new coroutine without blocking the current thread.delay suspends the coroutine without blocking the thread.