📌 Kotlin Coroutines에서 awaitAll
사용하기
1. 개요
Kotlin의 awaitAll
함수는 여러 개의 Deferred
값을 동시에 기다릴 수 있는 비동기 동시 실행 기능을 제공합니다.
해당 함수는 모든 Deferred
작업이 완료될 때까지 대기한 후, 결과 리스트를 반환합니다. 만약 하나라도 실패하거나 취소되면 awaitAll
은 즉시 예외를 발생시킵니다.
2. 기본 사용법
다음은 awaitAll
을 활용하는 기본적인 예제입니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferred1 = async { delay(1000L); "Result 1" }
val deferred2 = async { delay(2000L); "Result 2" }
val deferred3 = async { delay(1500L); "Result 3" }
val results = listOf(deferred1, deferred2, deferred3).awaitAll()
println("Results: $results")
}
위 코드에서 awaitAll
을 사용하여 deferred1
, deferred2
, deferred3
의 완료를 동시에 기다린 후, 결과를 리스트로 반환받습니다.
3. awaitAll
과 예외 처리
awaitAll
은 하나의 Deferred
가 예외적으로 종료되면 즉시 예외를 던집니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferred1 = async { delay(1000L); "Success" }
val deferred2 = async { delay(500L); throw Exception("Error Occurred") }
val deferred3 = async { delay(1500L); "Will not execute" }
try {
val results = listOf(deferred1, deferred2, deferred3).awaitAll()
println("Results: $results")
} catch (e: Exception) {
println("Caught exception: ${e.message}")
}
}
위 예제에서는 deferred2
가 500ms 후 예외를 발생시키면서 awaitAll
이 즉시 예외를 던지고, 나머지 Deferred
는 실행되지 않습니다.
4. awaitAll
함수의 두 가지 형태
awaitAll
함수에는 두 가지 형태가 존재합니다.
- **Vararg Parameter 버전**
여러 개의suspend fun awaitAll(vararg deferreds: Deferred): List
Deferred
값을 인자로 전달할 수 있습니다. - **Collection Extension 버전**
suspend fun Collection<Deferred>.awaitAll(): List
Deferred
객체의 컬렉션에서 확장 함수로 사용할 수 있습니다.
📌 원본 출처
본 문서의 예제와 내용은 Kotlin 공식 문서를 참고하여 작성되었습니다. 자세한 내용은 아래 공식 문서를 통해 확인할 수 있습니다.
'Kotlin > kotlinx.coroutines' 카테고리의 다른 글
cancel (0) | 2025.02.07 |
---|---|
awaitCanellation (0) | 2025.02.07 |
await (0) | 2025.02.07 |
async (0) | 2025.02.06 |
asContextElement (0) | 2025.02.06 |