-
Notifications
You must be signed in to change notification settings - Fork 22
About Async and Await
Devrath edited this page Jan 16, 2024
·
5 revisions
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:
-
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 ofDeferred
, 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 { // ... }
- When you have multiple independent tasks that can be executed concurrently, you can use
-
Use
await
to retrieve the results:- After launching multiple
async
coroutines, you can useawait
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()
- After launching multiple
-
Use
async
andawait
within asuspend
function:- It's common to use
async
andawait
within asuspend
function to perform asynchronous operations. - The
async
coroutines can be launched and awaited within asuspend
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 }
- It's common to use
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.