Bird
Raised Fist0
Kotlinprogramming~10 mins

Async coroutine builder in Kotlin - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to launch a coroutine using the async builder.

Kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferred = [1] {
        delay(1000L)
        "Hello"
    }
    println(deferred.await())
}
Drag options to blanks, or click blank then click option'
Aasync
Blaunch
Crun
DwithContext
Attempts:
3 left
💡 Hint
Common Mistakes
Using launch instead of async, which returns Job and not Deferred.
Using run which is not a coroutine builder.
Using withContext which is for context switching, not launching async coroutines.
2fill in blank
medium

Complete the code to start an async coroutine in the IO dispatcher.

Kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferred = async([1]) {
        delay(500L)
        42
    }
    println(deferred.await())
}
Drag options to blanks, or click blank then click option'
ADispatchers.Main
BDispatchers.IO
CDispatchers.Default
DDispatchers.Unconfined
Attempts:
3 left
💡 Hint
Common Mistakes
Using Dispatchers.Main which is for UI thread.
Using Dispatchers.Default which is for CPU-intensive tasks.
Using Dispatchers.Unconfined which is not recommended for IO.
3fill in blank
hard

Fix the error in the async coroutine builder usage.

Kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferred = async {
        delay(1000L)
        [1]
    }
    println(deferred.await())
}
Drag options to blanks, or click blank then click option'
Aprintln("Done")
Breturn "Done"
Cdelay(500L)
D"Done"
Attempts:
3 left
💡 Hint
Common Mistakes
Using return inside lambda causes syntax error.
Using println returns Unit, not the desired result.
Calling delay again does not return the result.
4fill in blank
hard

Fill both blanks to create a map of word lengths for words longer than 3 characters.

Kotlin
val words = listOf("apple", "bat", "carrot", "dog")
val lengths = words.associateWith { word -> word.[1] }
    .filter { (word, length) -> length [2] 3 }
Drag options to blanks, or click blank then click option'
Alength
Bcount
C>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using count instead of length property.
Using less than instead of greater than in filter.
Filtering on word instead of length.
5fill in blank
hard

Fill all three blanks to create a map of uppercase words to their lengths, filtering lengths greater than 4.

Kotlin
val words = listOf("pear", "plum", "banana", "kiwi")
val result = words.associate { [1] to [2] }
    .filter { (_, length) -> length [3] 4 }
Drag options to blanks, or click blank then click option'
Aword.uppercase()
Bword.length
C>
Dword.lowercase()
Attempts:
3 left
💡 Hint
Common Mistakes
Using lowercase instead of uppercase.
Using word instead of word.length for value.
Using less than instead of greater than in filter.

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