728x90
- 자식은 부모로부터 컨텍스트를 상속받습니다.
- 부모는 모든 자식이 작업을 마칠 때까지 기다립니다.
- 부모 코투린이 취소되면 자식 코루틴도 취소됩니다.
- 자식 코루틴에서 에러가 발생하면, 부모 코루틴 또한 에러로 소멸합니다.
- Job 이란?
- 시작된 코루틴에 대한 핸들로 사용된다.
- launch 코루틴 빌더는 Job 객체를 반환하고, 이 객체를 사용하여 코루틴이 완료될 때까지 대기하거나 코루틴의 상태를 관리할 수 있다.
- 코루틴 빌더는 부모의 잡을 기초로 자신들의 잡을 생성한다.
- 모든 코루틴 빌더는 자신만의 잡을 생성합니다.
- 대부분의 코루틴 빌더는 잡을 반환하므로 어느 곳에서든 사용할 수 있습니다.
- launch 의 명시적 반환 타입이 Job 이라는 사실을 통해 확인할 수 있습니다.
- Job 은 코루틴이 상속하지 않는 유일한 코루틴 컨텍스트이며, 이는 코루틴에서 아주 중요한 법칙입니다.
- 부모 잡은 자식 잡 모두를 참조할 수 있으며, 자식 또한 부모를 참조할 수 있습니다.
- 잡을 참조할 수 있는 부모-자식 관계가 있기 때문에 코루틴 스코프 내에서 취소와 예외 처리 구현이 가능합니다.
- 자식들 기다리기
- join 메서드를 사용합니다.
- join 은 지정한 잡이 Completed 나 Cancelled 와 같은 마지막 상태에 도달할 때까지 기다리는 중단 함수 입니다.
- 잡 팩토리 함수
- Job 은 Job() 팩토리 함수를 사용하면 코루틴 없이도 Job을 만들 수 없습니다.
- 팩토리 함수로 생성하는 잡은 어떤 코루틴과도 연관되지 않으며, 컨텍스트로 사용될 수 있다.
- 한개 이상의 자식 코루틴을 가진 부모 잡으로 사용할수도 있다.
@Test
fun `코루틴 딥다이브 94페이지`() {
runBlocking { // 메인 코루틴 시작
val job = Job() // 부모 Job 생성
launch(job) {// 첫번째 코루틴 시작
repeat(5) { num ->
delay(200)
println("Rep$num")
}
}
launch { // 독립적인 두번째 코루틴 시작
delay(500)
println("second")
job.complete() // 첫 번째 코루틴의 부모 Job 을 완료 상태로 변경
}
job.join() // 첫 번째 코루틴 작업 완료를 기다림
launch(job) { // 세번 째 코루틴 시작(부모 Job을 상속받음)
println("Will not be printed")
}
println("Done")
}
}
728x90
'공부 > 코틀린코루틴:딥다이브(마르친 모스카와)' 카테고리의 다른 글
12장 - 디스패처 (0) | 2024.02.20 |
---|---|
9장 - 취소 (0) | 2024.02.05 |
7장 - 코루틴 컨텍스트 (0) | 2024.01.29 |
6장 - 코루틴 빌더 (0) | 2024.01.29 |
4장 - 코루틴의 실제 구현 (2) | 2024.01.14 |
댓글