Coroutine Exception

    [Coroutine] 13. supervisorScope를 이용한 Coroutine Exception Handling

    블록 내부의 모든 코루틴에 SupervisorJob()을 설정 : supervisorScope 앞선 12번글에서 SupervisorJob을 이용해 Error을 Handling하는 방법을 알았다. 하지만, 매번 CoroutineContext에 SupervisorJob을 설정할 필요 없이 특정 블록 내부의 모든 코루틴에 Supervisor Job을 설정하고 싶을 수 있다. 이 때 사용하는 것이 바로 supervisorScope이다. 과 같이 supervisorScope 내부에 코루틴이 있다면 모든 코루틴은 SupervisorJob의 적용을 받게된다. 예를들어 아래와 같은 코드가 있다고 해보자. suspend fun main() { CoroutineScope(Dispatchers.IO).launch { // ..

    [Coroutine] 12. SupervisorJob를 이용한 Coroutine Exception Handling

    Coroutine의 Exception Handling Coroutine은 비동기 프로그래밍을 위한 일시중단가능한 경량 스레드이기 때문에 코루틴 내부에서 코루틴이 수행될 수 있으며, 그 깊이는 무한해질 수 있다. 하지만, 코루틴 내부에서 수행되는 자식 코루틴에 애러가 생겼을 때 별도의 Exception Handler을 설정해주지 않으면 자식 코루틴은 부모 코루틴까지 취소시키게 된다. 부모 코루틴이 취소되면 당연히 부모의 자식으로 있는 코루틴이 모두 취소된다. 예를 들어 아래와 같은 구조의 코루틴이 수행된다고 해보자 만약 Child Coroutine1에서 애러가 생겨서 Coroutine이 취소되었다고 하면 아래와 같은 일이 일어난다. Child Coroutine1의 취소가 부모 Coroutine에게 전파된다..

    [Coroutine] 9. Coroutine Job에서 Exception이 발생했을 때 Exception Handling을 하는 방법

    이번 글에서는 Job의 Exception을 Handling하는 방법을 살펴볼 것이다. Exception을 Handling하는 방법은 invokeOnCompletion을 이용한 방법과 CoroutineExceptionHandler 을 이용하는 방법 이 있다. 먼저 invokeOnCompletion을 사용하는 방법을 살펴보자. invokeOnCompletion을 이용한 Exception Handling 앞서 7번 글에서 다웠던 invokeOnCompletion을 코루틴 내부에서 애러가 발생했을 때도 사용할 수 있다. 아래와 같이 invokeOnCompletion을 사용해 Exception을 Handling할 수 있다. fun main() = runBlocking { val job = launch(Dispat..