SupervisorJob은 자식 Job으로부터 예외를 전파받지 않아 서로 독립적으로 실패할 수 있다.
참고로 Supervisor의 뜻은 감독자다
자식 Job
이 실패하거나 취소되어도 SupervisorJob
이 실패하지 않고 다른 Job
의 작업에 영향을 미치지 않는다.
SupervisorJob
은 자식 Job
의 실패를 처리하기 위한 사용자 지정 정책을 구현할 수 있다.
launch
를 사용하여 생성된 자식Job
의 실패는 컨텍스트에서CoroutineExceptionHandler
를 통해 처리할 수 있다.async
를 사용하여 만든 자식Job
의 실패는 결과 지연 값에 대한Deferred.await
을 통해 처리할 수 있다.
상황 | Job |
---|---|
자식 코루틴끼리 운명을 같이 해야 하는 경우 | Job() |
자식 중 하나가 실패해도 다른 작업은 계속해야 하는 경우 | SupervisorJob() |
- 한 트랜잭션 내 여러 코루틴이 함께 동작해야 한다면 → Job() (전부 취소되어야 함)
- 병렬 HTTP 요청을 보내는데, 하나 실패했다고 다른 요청까지 취소되면 안 되는 경우 →
SupervisorJob()
SupervisorJob에 지정된 부모 Job
SupervisorJob에게 부모 Job이 지정되면 SupervisorJob은 부모의 자식 Job이 되고 부모 작업이 실패하거나 취소되면 취소된다. 이 경우 이 SupervisorJob의 모든 자식 작업도 취소된다.
'자바' 카테고리의 다른 글
Function literals with receiver 문서 정리 (0) | 2025.04.02 |
---|---|
Job (0) | 2025.04.01 |
CoroutineScope (0) | 2025.03.25 |
스레드 비용 (1) | 2025.03.12 |
성능 대 확장성 (0) | 2025.03.11 |