What does the launch builder do in Kotlin coroutines?
The launch builder starts a new coroutine that runs concurrently without blocking the current thread. It is used for tasks that don't return a result.
Click to reveal answer
beginner
What is the main difference between launch and async builders?
launch starts a coroutine that does not return a result, while async starts a coroutine that returns a Deferred result which can be awaited.
Click to reveal answer
beginner
How do you get the result from an async coroutine?
You call the await() function on the Deferred object returned by async to get the result once the coroutine completes.
Click to reveal answer
beginner
Why should you avoid blocking the main thread in Android apps?
Blocking the main thread freezes the UI, making the app unresponsive. Using coroutines with launch or async helps run tasks asynchronously to keep the UI smooth.
Click to reveal answer
intermediate
What happens if you call launch inside a CoroutineScope?
A new coroutine starts immediately within that scope and runs concurrently. It inherits the scope's context and lifecycle, so it cancels if the scope is cancelled.
Click to reveal answer
Which builder should you use to start a coroutine that returns a result?
Alaunch
Basync
CrunBlocking
Ddelay
✗ Incorrect
async returns a Deferred result that you can await().
What does launch return when called?
AJob
BDeferred<T>
CResult<T>
DNothing
✗ Incorrect
launch returns a Job representing the coroutine's lifecycle.
How do you wait for the result of an async coroutine?
Acall <code>start()</code>
Bcall <code>join()</code>
Ccall <code>cancel()</code>
Dcall <code>await()</code>
✗ Incorrect
await() suspends until the result is ready and returns it.
Which coroutine builder is best for fire-and-forget tasks?
Alaunch
Basync
CrunBlocking
DwithContext
✗ Incorrect
launch is used for tasks that don't return a result and run concurrently.
What happens if you call await() on a Deferred that is not completed yet?
AIt blocks the thread
BIt throws an exception
CIt suspends the coroutine until completion
DIt returns null
✗ Incorrect
await() suspends the coroutine without blocking the thread until the result is ready.
Explain how launch and async builders differ and when to use each in Android development.
Think about whether you need a result or just want to run code concurrently.
You got /4 concepts.
Describe how to get a result from an async coroutine and why blocking the main thread is bad.
Consider how Android apps stay smooth while doing background work.
You got /4 concepts.
Practice
(1/5)
1. What is the main difference between launch and async builders in Kotlin coroutines?
easy
A. launch is used only for UI updates, async for background tasks.
B. launch blocks the main thread, async does not.
C. launch returns a value immediately, async never returns.
D. launch does not return a result, async returns a Deferred result.
Solution
Step 1: Understand launch behavior
launch starts a coroutine that runs code asynchronously but does not return a value.
Step 2: Understand async behavior
async starts a coroutine and returns a Deferred object, which you can await to get a result.
Final Answer:
launch does not return a result, async returns a Deferred result. -> Option D
Quick Check:
launch = no result, async = returns result [OK]
Hint: Remember: async returns a result, launch does not [OK]
Common Mistakes:
Thinking launch returns a value
Confusing async with blocking calls
Assuming launch blocks the main thread
2. Which of the following is the correct syntax to start a coroutine with async in Kotlin?
easy
A. async.launch { fetchData() }
B. val result = launch { fetchData() }
C. val result = async { fetchData() }
D. launch.async { fetchData() }
Solution
Step 1: Identify correct coroutine builder usage
async is called as a function returning a Deferred, so val result = async { fetchData() } is correct.
Step 2: Check other options for syntax errors
launch does not return a value, so val result = launch { fetchData() } is wrong for async usage. Options C and D have invalid syntax.
Final Answer:
val result = async { fetchData() } -> Option C
Quick Check:
async returns Deferred, so assign it [OK]
Hint: async returns Deferred, assign it to a variable [OK]
Common Mistakes:
Using launch instead of async when expecting a result
Trying to chain async.launch or launch.async
Not assigning async result to a variable
3. What will be the output of this Kotlin coroutine code snippet?
fun main() = runBlocking {
val deferred = async {
delay(100)
10 + 20
}
println("Result: ${deferred.await()}")
}
medium
A. Result: 0
B. Result: 30
C. Compilation error
D. Runtime exception
Solution
Step 1: Understand async and await behavior
The async block runs asynchronously and returns a Deferred. Calling await() waits for the result.
Step 2: Calculate the expression inside async
The code delays 100ms then returns 10 + 20 = 30, which is printed.
Final Answer:
Result: 30 -> Option B
Quick Check:
async + await returns computed value [OK]
Hint: await() gets async result after delay [OK]
Common Mistakes:
Forgetting to call await() to get result
Expecting immediate result without delay
Confusing launch with async return
4. Identify the error in this Kotlin coroutine code:
fun main() = runBlocking {
val result = launch {
val data = fetchData()
}
println(data)
}
suspend fun fetchData(): String {
delay(100)
return "Hello"
}
medium
A. Variable 'data' is not accessible outside launch block
B. fetchData() cannot be called inside launch
C. runBlocking cannot be used with launch
D. Missing await() on launch
Solution
Step 1: Check variable scope of 'data'
The variable 'data' is declared inside the launch coroutine block, so it is not visible outside.
Step 2: Analyze println(data) usage
Trying to print 'data' outside launch causes a compilation error because 'data' is undefined there.
Final Answer:
Variable 'data' is not accessible outside launch block -> Option A
Quick Check:
Variables inside launch are local to its block [OK]
Hint: Variables inside launch are local; can't access outside [OK]
Common Mistakes:
Assuming launch returns a value
Trying to await launch (which returns Job)
Ignoring variable scope rules
5. You want to fetch two independent data sources concurrently and combine their results. Which Kotlin coroutine approach is best?
val data1 = async { fetchData1() }
val data2 = async { fetchData2() }
val combined = data1.await() + data2.await()
Why is this approach preferred over launching two launch coroutines and combining results later?
hard
A. async returns Deferred results that can be awaited and combined immediately
B. launch blocks the main thread, async does not
C. launch cannot run multiple coroutines concurrently
D. async automatically caches results, launch does not
Solution
Step 1: Understand concurrency with async
Using async starts coroutines that return Deferred results, allowing you to wait for and combine their outputs.
Step 2: Compare with launch behavior
launch returns Job and does not provide a direct result, so combining outputs requires extra state management.
Final Answer:
async returns Deferred results that can be awaited and combined immediately -> Option A
Quick Check:
async = awaitable result, launch = no result [OK]
Hint: Use async to get results you can combine easily [OK]
Common Mistakes:
Thinking launch returns a value
Assuming launch blocks main thread
Believing async caches results automatically
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.