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.