(위의 이전 장에 이어서...)
COMPLETING
, COMPLETED
나누어진 이유?
fun main(): Unit = runBlocking {
launch {
delay(600L)
println("Yeah")
}
launch {
delay(300L)
throw IllegalStateException()
}
}
Structured Concurrency
라고 함코틀린 공식 문서
- Structured Concurrecny는 수많은 코루틴이 유실되거나 누수되지 않도록 보장한다.
- Structured Concurrency는 코드 내의 에러가 유실되지 않고 적절히 보고될 수 있도록 보장한다.
CancellationException
은 정상적인 취소로 간주되어 부모 코루틴에게 전파되지 않는다.
- CancellationException: 이 예외는 코루틴이 정상적으로 취소되었음을 나타내며, 다른 예외와 다르게 부모 코루틴을 취소시키지 않는다. 따라서, 부모 코루틴이 다른 자식 코루틴을 계속 실행할 수 있다.
- Structured Concurrency: 코루틴의 생명주기와 에러 처리를 체계적으로 관리하여, 자식 코루틴의 실행 상태가 부모 코루틴의 상태와 연결되도록 하는 개념. 이는 코루틴의 실행 흐름을 명확하게 유지하고, 예외가 발생했을 때 적절히 처리되도록 돕는다.
- 부모 코루틴과 자식 코루틴의 관계: 부모 코루틴이 취소되면 모든 자식 코루틴도 취소된다. 반대로, 자식 코루틴에서 예외가 발생하면 부모 코루틴이 취소되며 다른 자식 코루틴들도 취소된다. 이는 자식 코루틴의 작업 상태가 부모 코루틴에 의해 관리된다는 것을 의미한다.