The launch coroutine builder lets you start a new task that runs in the background without blocking the main program. It helps you do many things at once easily.
Launch coroutine builder in Kotlin
launch(context) {
// code to run in coroutine
}launch starts a new coroutine immediately.
The context is optional and defines where the coroutine runs (like on the main thread or background).
launch {
println("Hello from coroutine!")
}launch(Dispatchers.IO) {
// Run blocking IO task here
}val job = launch { delay(1000L) println("Task done") } job.cancel()
This program starts a coroutine that waits half a second and then prints "World!" while the main coroutine prints "Hello," immediately. The delay at the end keeps the program running so we see both messages.
import kotlinx.coroutines.* fun main() = runBlocking { launch { delay(500L) println("World!") } println("Hello,") delay(1000L) // Wait to keep JVM alive }
launch returns a Job which you can use to cancel or check the coroutine.
Coroutines started with launch do not return a result. Use async if you need a result.
Always use runBlocking or another coroutine scope to keep the program alive when testing coroutines in main.
launch starts a new coroutine that runs independently.
It is useful for background tasks that do not return a value.
You can control and cancel coroutines using the Job returned by launch.
Practice
launch coroutine builder do in Kotlin?Solution
Step 1: Understand the purpose of
Thelaunchlaunchbuilder starts a coroutine that runs concurrently without blocking the current thread.Step 2: Compare with other coroutine builders
Unlikeasync,launchdoes not return a result and does not block the thread.Final Answer:
Starts a new coroutine that runs independently without blocking the current thread. -> Option AQuick Check:
launch= independent coroutine start [OK]
- Thinking launch blocks the thread
- Expecting launch to return a value
- Confusing launch with thread creation
Solution
Step 1: Recall the syntax of
Thelaunchlaunchbuilder requires a lambda block enclosed in curly braces.Step 2: Check each option
launch { println("Hello") } correctly useslaunch { ... }. Others have syntax errors or wrong symbols.Final Answer:
launch { println("Hello") } -> Option BQuick Check:
Correct coroutine launch syntax = launch { println("Hello") } [OK]
- Omitting curly braces
- Using parentheses without braces
- Using arrow or colon incorrectly
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(100)
println("World")
}
println("Hello")
}Solution
Step 1: Analyze the order of execution
Thelaunchcoroutine delays 100ms before printing "World". Meanwhile,println("Hello")runs immediately.Step 2: Understand runBlocking behavior
runBlockingwaits for all child coroutines to complete before exiting, so both prints occur.Final Answer:
Hello World -> Option CQuick Check:
Immediate print then delayed print = Hello\nWorld [OK]
- Assuming launch blocks main thread
- Expecting 'World' before 'Hello'
- Ignoring delay effect
fun main() = runBlocking {
launch {
delay(100)
println("Done")
}
cancel()
println("Cancelled")
}Solution
Step 1: Understand cancel() effect on runBlocking
Callingcancel()cancels the entire coroutine scope immediately, stopping child coroutines.Step 2: Check output consequences
Because of cancellation, the launched coroutine does not complete, so "Done" is not printed, but "Cancelled" is printed after cancel.Final Answer:
Calling cancel() cancels the runBlocking scope immediately, so "Done" is never printed. -> Option DQuick Check:
cancel() stops coroutines immediately = Calling cancel() cancels the runBlocking scope immediately, so "Done" is never printed. [OK]
- Thinking delay() is invalid in launch
- Expecting launch to return a value
- Assuming println after cancel won't run
Solution
Step 1: Ensure main waits for coroutines
UsingrunBlockingwithlaunchinside ensures the main thread waits for all launched coroutines to complete.Step 2: Check each option's behavior
runBlocking { repeat(3) { i -> launch { delay(100L * i) println(i + 1) } } } launches coroutines insiderunBlocking, so main waits. runBlocking { repeat(3) { i -> launch { delay(100L * i) println(i + 1) } } println("Done") } prints "Done" immediately without waiting. repeat(3) { i -> launch { delay(100L * i) println(i + 1) } } println("Done") launches outside runBlocking, so main exits early. runBlocking { repeat(3) { i -> launch { delay(100L * i) println(i + 1) } } delay(400) } uses delay but is less reliable than waiting for coroutines.Final Answer:
runBlocking with launch inside to wait for all coroutines. -> Option AQuick Check:
runBlocking + launch inside = wait for all [OK]
- Launching coroutines outside runBlocking
- Printing before coroutines finish
- Using delay to wait instead of structured concurrency
Ready to prove it?
Pass the test and this pattern moves unknown
