Bird
Raised Fist0
Kotlinprogramming~5 mins

Async coroutine builder in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the async coroutine builder in Kotlin?
The async builder starts a coroutine that runs concurrently and returns a Deferred object, which represents a future result that 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. This suspends the coroutine until the result is ready.
Click to reveal answer
intermediate
What is the difference between launch and async coroutine builders?
launch starts a coroutine that does not return a result and is used for jobs. async starts a coroutine that returns a result wrapped in a Deferred.
Click to reveal answer
intermediate
Can you explain what happens if you call await() on a Deferred that is not yet completed?
The coroutine calling await() suspends and waits until the Deferred completes and the result is available.
Click to reveal answer
beginner
Show a simple Kotlin code snippet using async to run two tasks concurrently and get their results.
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferred1 = async { 10 * 2 }
    val deferred2 = async { 5 + 5 }
    println("Result 1: ${deferred1.await()}")
    println("Result 2: ${deferred2.await()}")
}
Click to reveal answer
What does the async coroutine builder return?
AA Deferred object representing a future result
BA Job object with no result
CA regular function result immediately
DA Thread object
Which function do you call to get the result from an async coroutine?
Astart()
Bjoin()
Cawait()
Drun()
What happens if you call await() on a Deferred that is already completed?
AThrows an exception
BReturns the result immediately without suspension
CSuspends indefinitely
DStarts the coroutine again
Which coroutine builder is best when you want to start a coroutine that does not return a result?
AwithContext
Basync
CrunBlocking
Dlaunch
What is the main advantage of using async over sequential code?
ARuns tasks concurrently to save time
BRuns tasks sequentially to avoid errors
CBlocks the main thread
DRuns tasks on a new thread always
Explain how the async coroutine builder works and how you retrieve its result.
Think about how you ask a friend to do a task and wait for their answer later.
You got /4 concepts.
    Describe the difference between launch and async coroutine builders in Kotlin.
    One is for jobs without results, the other for tasks that produce results.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does the async coroutine builder do in Kotlin?
      easy
      A. Starts a background task and returns a Deferred result
      B. Blocks the main thread until the task finishes
      C. Runs code only on the main thread
      D. Creates a new thread without coroutine support

      Solution

      1. Step 1: Understand async behavior

        The async builder starts a coroutine that runs in the background without blocking the main thread.
      2. Step 2: Recognize the return type

        It returns a Deferred object which holds the future result of the background task.
      3. Final Answer:

        Starts a background task and returns a Deferred result -> Option A
      4. Quick Check:

        async = background task + Deferred [OK]
      Hint: async always returns Deferred for background work [OK]
      Common Mistakes:
      • Thinking async blocks the main thread
      • Confusing async with launch which returns Job
      • Assuming async runs only on main thread
      2. Which of the following is the correct syntax to start an async coroutine in Kotlin?
      easy
      A. val result = async(compute())
      B. val result = async { compute() }
      C. val result = async.compute()
      D. val result = async -> compute()

      Solution

      1. Step 1: Identify correct async syntax

        The async builder is called with a lambda block: async { ... }.
      2. Step 2: Check each option

        val result = async { compute() } correctly uses async { compute() }. Options B, C, and D misuse parentheses or operators.
      3. Final Answer:

        val result = async { compute() } -> Option B
      4. Quick Check:

        async uses curly braces for lambda [OK]
      Hint: async always uses curly braces for its block [OK]
      Common Mistakes:
      • Using parentheses instead of curly braces
      • Trying to call async like a function with dot notation
      • Using arrow syntax incorrectly
      3. What will be the output of this Kotlin code snippet?
      import kotlinx.coroutines.*
      
      fun main() = runBlocking {
          val deferred = async {
              delay(100)
              42
          }
          println("Result: ${deferred.await()}")
      }
      medium
      A. Result: null
      B. Result: Deferred@someHashCode
      C. Result: 42
      D. Compilation error

      Solution

      1. Step 1: Understand async and await

        The async block runs a coroutine that delays 100ms then returns 42. The await() waits for this result.
      2. Step 2: Print the awaited result

        The println prints "Result: " plus the awaited value 42.
      3. Final Answer:

        Result: 42 -> Option C
      4. Quick Check:

        await() returns 42 after delay [OK]
      Hint: await() gets the actual result from Deferred [OK]
      Common Mistakes:
      • Printing Deferred object instead of awaited value
      • Forgetting to call await()
      • Expecting immediate result without delay
      4. Identify the error in this Kotlin coroutine code:
      fun main() = runBlocking {
          val deferred = async {
              delay(100)
              10 / 0
          }
          println(deferred.await())
      }
      medium
      A. Division by zero causes ArithmeticException at await()
      B. async cannot be used inside runBlocking
      C. Missing launch builder for coroutine
      D. delay() cannot be called inside async

      Solution

      1. Step 1: Analyze the async block

        The async block performs 10 / 0, which causes a division by zero error.
      2. Step 2: Understand exception propagation

        The exception is thrown when await() is called, as it waits for the async result.
      3. Final Answer:

        Division by zero causes ArithmeticException at await() -> Option A
      4. Quick Check:

        Exceptions in async appear on await() [OK]
      Hint: Errors inside async show up when calling await() [OK]
      Common Mistakes:
      • Thinking async can't be inside runBlocking
      • Assuming delay() is invalid in async
      • Ignoring exceptions thrown inside async block
      5. You want to run two independent background tasks concurrently and get their sum. Which Kotlin code correctly uses async to achieve this?
      fun main() = runBlocking {
          val deferred1 = async { 10 }
          val deferred2 = async { 20 }
          val sum = ???
          println(sum)
      }
      hard
      A. val sum = deferred1.get() + deferred2.get()
      B. val sum = deferred1 + deferred2
      C. val sum = await(deferred1) + await(deferred2)
      D. val sum = deferred1.await() + deferred2.await()

      Solution

      1. Step 1: Understand how to get results from Deferred

        Each async returns a Deferred. To get the actual value, call await() on each.
      2. Step 2: Sum the awaited results

        Use deferred1.await() + deferred2.await() to get the sum of both results.
      3. Final Answer:

        val sum = deferred1.await() + deferred2.await() -> Option D
      4. Quick Check:

        Sum = await both Deferreds [OK]
      Hint: Use await() on Deferred to get values before summing [OK]
      Common Mistakes:
      • Trying to add Deferred objects directly
      • Using non-existent get() method
      • Calling await() as a standalone function
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard