Skip to content

About Async and Await

Devrath edited this page Jan 16, 2024 · 5 revisions

What is the significance of using async and await

Basically Async is used to compute the code asynchronously and Await is used to return the result of that computation. They are called in suspending function.

Here's a brief explanation of when to use async and await in Android Kotlin coroutines:

  1. Use async when you want to perform concurrent tasks:

    • When you have multiple independent tasks that can be executed concurrently, you can use async to launch coroutines for each task.
    • async returns an instance of Deferred, which is a lightweight non-blocking future representing a value that may or may not be available.
    val result1: Deferred<ResultType1> = async { // ... }
    val result2: Deferred<ResultType2> = async { // ... }
  2. Use await to retrieve the results:

    • After launching multiple async coroutines, you can use await to retrieve the results of each coroutine when needed.
    • await is a suspending function, meaning it can only be called from within a coroutine or another suspending function.
    val result1: ResultType1 = result1.await()
    val result2: ResultType2 = result2.await()
  3. Use async and await within a suspend function:

    • It's common to use async and await within a suspend function to perform asynchronous operations.
    • The async coroutines can be launched and awaited within a suspend function, allowing you to structure your asynchronous code more sequentially.
    suspend fun performAsyncTasks(): CombinedResult {
        val result1: Deferred<ResultType1> = async { /* ... */ }
        val result2: Deferred<ResultType2> = async { /* ... */ }
    
        val combinedResult = CombinedResult(result1.await(), result2.await())
        return combinedResult
    }

Remember that coroutines are generally used to handle asynchronous operations in a more structured and readable way, making the code easier to reason about. Always be mindful of the coroutine context, and try to avoid blocking operations within coroutines whenever possible.

Clone this wiki locally