KOTLIN · 비동기
SupervisorScope 심화
supervisorScope와 SupervisorJob의 차이점과 올바른 사용법을 다룹니다.
비동기고급supervisorScopesupervisorerror-isolationparallel
핵심 설명
supervisorScope와 SupervisorJob의 차이점과 올바른 사용법을 다룹니다.
Kotlin code
import kotlinx.coroutines.*
fun main() = runBlocking {
println("=== supervisorScope ===")
supervisorScope {
val job1 = launch {
delay(100)
throw RuntimeException("작업1 실패")
}
val job2 = launch {
delay(200)
println("작업2 완료!") // 실행됨
}
val job3 = launch {
delay(300)
println("작업3 완료!") // 실행됨
}
// 개별 예외 처리
try { job1.join() } catch (e: Exception) {
println("job1 오류: ${e.message}")
}
job2.join()
job3.join()
}
println("
=== 개별 try-catch ===")
coroutineScope {
val results = listOf("A", "B", "ERROR", "C").map { item ->
async(SupervisorJob()) {
if (item == "ERROR") throw RuntimeException("$item 실패")
delay(100)
"처리: $item"
}
}
results.forEach { deferred ->
runCatching { deferred.await() }
.onSuccess { println(it) }
.onFailure { println("실패: ${it.message}") }
}
}
}학습 팁
supervisorScope는 자식의 실패를 격리합니다. 여러 독립 API 호출을 병렬 실행하고 일부 실패를 허용할 때 사용하세요.
주의할 점
async(SupervisorJob())으로 독립 Deferred를 만들면 부모와의 구조가 깨집니다. 가능하면 supervisorScope 내에서 async를 사용하세요.
자주 묻는 질문
SupervisorScope 심화란 무엇인가요?
supervisorScope 와 SupervisorJob 의 차이점과 올바른 사용법을 다룹니다.
SupervisorScope 심화 학습 시 주의할 점은 무엇인가요?
async(SupervisorJob()) 으로 독립 Deferred를 만들면 부모와의 구조가 깨집니다. 가능하면 supervisorScope 내에서 async 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.