코틀린 코루틴(12)
Hello
Coroutine 1
Coroutine 1 was cancelled
Check: kotlinx.coroutines.JobCancellationException: Parent job is Cancelling; job="coroutine#2":StandaloneCoroutine{Cancelling}@3fd15b16
Coroutine 2 was cancelled
Caught in CoroutineExceptionHandler java.lang.NullPointerException
End
일반 Job:
1) 자식 코루틴에서 예외가 발생하면 해당 예외가 부모 코루틴에게 전파됩니다.
2) 부모 코루틴은 예외를 감지하고 나머지 자식 코루틴들에게 예외를 전파하여 취소합니다.
3) 부모 코루틴도 취소됩니다.
Hello
Coroutine 1
Coroutine 1 was cancelled
Caught in CoroutineExceptionHandler java.lang.NullPointerException
Coroutine 2
Coroutine 2 has completed
Goodbye
End
SupervisorJob:
1) 자식 코루틴에서 예외가 발생해도 해당 예외는 부모 코루틴이나 다른 자식 코루틴에게 전파되지 않는다.
2) 부모 코루틴과 다른 자식 코루틴은 계속 실행된다.
Hello
Coroutine 1
Coroutine 1 was cancelled
Caught in CoroutineExceptionHandler java.lang.NullPointerException
Coroutine 2
Coroutine 2 has completed
Goodbye
End
- SupervisorJob은 자식 코루틴에서 발생한 예외에 영향을 받지 않는다.
- 양방향 예외 전파는 자식 코루틴이 실패하면 부모 코루틴도 취소되고, 부모 코루틴이 취소되면 자식 코루틴도 취소되는 경우를 의미한다.
- supervisorScope는 coroutineScope처럼 새로운 코루틴 스코프를 생성하는 스코핑 함수이다.
- supervisorScope 내에서 실행되는 자식 코루틴들은 SupervisorJob의 특성을 가진다.