Bird
Raised Fist0
Kotlinprogramming~5 mins

Async coroutine builder in Kotlin

Choose your learning style10 modes available
Introduction

Async coroutine builder helps you run tasks in the background without stopping your main program. It lets you start work now and get the result later.

When you want to download data from the internet without freezing the app.
When you need to do a long calculation but still keep the app responsive.
When you want to start multiple tasks at the same time and wait for all results.
When you want to improve app speed by doing work in parallel.
When you want to handle tasks that might take time, like reading files or databases.
Syntax
Kotlin
val deferred = async {
    // some suspend function or long running code
}

val result = deferred.await()

async starts a coroutine that returns a Deferred object.

You use await() on the Deferred to get the result when ready.

Examples
This example waits 1 second and then returns "Hello".
Kotlin
val deferred = async {
    delay(1000L)
    "Hello"
}

val result = deferred.await()
Starts two tasks at once and adds their results after both finish.
Kotlin
val deferred1 = async { 10 * 10 }
val deferred2 = async { 20 + 30 }

val sum = deferred1.await() + deferred2.await()
Sample Program

This program starts an async coroutine that waits half a second and returns "Kotlin". Meanwhile, it prints a message. Then it waits for the result and prints it.

Kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferred = async {
        delay(500L)
        "Kotlin"
    }
    println("Waiting for result...")
    val result = deferred.await()
    println("Result: $result")
}
OutputSuccess
Important Notes

Use async inside a coroutine scope like runBlocking or launch.

Calling await() suspends the current coroutine until the result is ready.

Don't forget to import kotlinx.coroutines.* to use async and await.

Summary

async starts a background task and returns a Deferred result.

Use await() to get the result when it is ready, without blocking the whole program.

This helps keep your app responsive while doing work in the background.

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