잡히지 않은 예외가 발생하면 프로그램이 종료되는 것처럼 코루틴도 잡히지 않은 예외가 발생했을 때 종료됩니다.
코루틴 빌더는 부모도 종료시키며, 취소된 부모는 자식들 모두를 취소시킨다.
launch 코루틴을 더하는 건 아무것도 바꾸지 못한다.
<aside> 💡
→ 값을 만들어내지 않고 단지 백그라운드에서 작업만 실행하고 끝나기 때문에
프로그램 흐름이나 계산 결과에 직접적인 영향을 주지 못한다.
→ launch는 결과값을 반환하지 않기 때문에 코드 실행 흐름이나 결과값을 바꾸지 못한다.
</aside>
예외는 자식에서 부모로 전파되며, 부모가 취소되면 자식도 취소되기 때문에 쌍방으로 전파된다.
예외 전파가 정지되지 않으면 계통 구조상 모든 코루틴이 취소되게 된다.
코루틴 간의 상호작용은 잡을 통해서 일어나기 때문에, 코루틴 빌더 내부에서 새로운 코루틴 빌더를 try-catch 문을 통해 래핑하는 건 전혀 도움이 되지 못합니다.
// 잘 못 사용된 예시
fun main() = runBlocking {
try {
launch {
throw Exception("예외 발생!")
}
} catch (e: Exception) {
println("잡았나요? ${e.message}")
}
launch {
delay(2000)
println("Will not be printed")
}
}
launch함수는 코루틴을 생성하는데 사용되는 함수 일 뿐이기 때문에
lauch함수를 try-catch문으로 감싸면 코루틴이 잘 생성되는지만 확인한다.