본문 바로가기

코루틴2

코루틴 내부에서 예외가 발생했을 때 목적저번 글에서 코루틴의 async, launch와 관련된 예외 케이스를 다뤘다. 하지만 좀 더 근본적으로 코루틴 내부에서 예외가 발생했을 때 어떻게 처리되는지 알고 싶어서 이 글을 작성하게 됐다 미리 알아둬야 하는 개념이 글을 읽기 전 미리 알아둬야 하는 개념이 있다. 그것은 바로 job이다. 코루틴도 job의 하나이다job의 특징에 대해 나열해 보도록 하겠다job은 취소가 가능하다job은 부모-자식 관계를 만들 수 있으며, 부모 job이 취소되면 자식 job들도 재귀적으로 취소된다자식 job이 예외를 던지면서 실패하면 부모 job에게 취소요청을 보낸다. 단 'CancellationException' 외의 예외일 때만 해당되며, 이 동작은 SupervisorJob에 의해 변할 수 있다코루틴에서 lauc.. 2025. 3. 8.
코루틴의 async 내에서 예외 발생 시 동작 목적코루틴을 이용하여 비동기 작업을 처리하던 중 'async'와 'launch' 내부에서 예외가 발생하면 어떻게 처리될지 궁금해졌다그래서 여러 글을 찾아보던 중 async 내부에서 예외가 발생하면, await을 호출하기 전까지는 예외가 발생하지 않는다는 글을 봤다async 내부에서 예외가 발생하면 그 즉시 자식, 부모 코루틴에 예외 및 취소 신호를 보내야 하지 않나?라는 의문점이 들었고 이 의문점을 해결하고자 글을 작성하게 됐다문제상황 재현먼저 async 내부에서 예외를 발생시키고 await 은 호출하지 않는 코드를 실행시켜 봤다. 아래 코드가 그 예이다fun withoutAwait() { val deferred = CoroutineScope(Dispatchers.IO).async{ .. 2025. 3. 3.