Job() 생성후 complete을 불러 주어야 하는 경우가 헷깔립니다.
- 학습 관련 질문을 남겨주세요. 질문을 상세히 작성하면 더 좋습니다.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요.
Job() 생성시에 어떤 경우는 compete을 호출해 주어야 하고 어떤 경우는 아닌 것 같은데 그 상황이 헷깔려서 문의 드립니다.
강의에서는 다음과 같이 설명 합니다.
launch나 async 함수를 통해 생성한 job객체는 모든 코드가 실행 되면 자동 완료 되지만 job 생성 함수를 통해 생성한 job 객체는 자동으로 실행 완료 되지 않습니다.
아래 코드에서는 launch 안에서 생성함수를 통해 생성한 job 객체는 자동 완료 되지 않는 것으로 보입니다.
fun main() = runBlocking<Unit> {
launch(CoroutineName("Coroutine1")) {
launch(CoroutineName("Coroutine2") + Job(parent = this.coroutineContext[Job])) {
delay(100L)
println("[${Thread.currentThread().name}] 코루틴 실행")
}
}
}
하지만 아래 코드에서는 똑같이 생성함수를 통해 생성된 job 객체인데도 자동 완료 되는 이유는 무엇인가요?
fun main() = runBlocking<Unit> {
launch(CoroutineName("Coroutine1")) {
val newJob = Job()
launch(CoroutineName("Coroutine2") + newJob) {
delay(100L)
println("[${Thread.currentThread().name}] 코루틴 실행")
}
}
}
回答 1
1
mamu님 안녕하세요. 지식공유자 조세영입니다.
첫번째 코드의 경우 Job의 parent 인자로 넘기신 Job이 runBlocking 코루틴의 자식 코루틴의 Job입니다. 따라서 runBlocking 코루틴은 해당 Job이 완료되기까지 완료 중 상태에 머뭅니다.
하지만 두 번째 코드의 경우 Job이 parent 없이 생성되고 있습니다. 즉, 기존 runBlocking 의 Job과의 구조화가 깨지기 때문에 runBlocking 코루틴이 해당 Job을 기다리지 않고 완료됩니다.
즉, 해당 Job은 완료되지 않지만 runBlocking 코루틴이 완료돼 프로세스가 종료되는 것입니다.
답변이 도움이 되면 좋을 것 같습니다.
감사합니다.
CoroutineDispatcher에 대한 질문
0
79
2
코루틴과 JVM이 끝나는 조건에 대해 문의 드립니다.
0
83
2
왜 runBlocking 종료로 메인스레드가 종료될까요?
0
120
1
cancel 질문드립니다.
1
85
2
delay 함수 사용 시 스레드 양보
1
127
2
강사님께서 번역해주신 코틀린 코루틴 공식 가이드 문서 문의
2
149
2
Flow와 Channel
1
146
2
[코틀린 코루틴의 정석 책 추첨 이벤트] 강의 구매 기간 관련 문의
1
221
1
[코루틴 테스트 심화] runTest의 스레드 관련 문의
1
164
2
job과 코루틴의 관계?
3
257
2
코루틴의 blocking I/O작업 처리
0
161
2
KTOR Server 에서 delay
0
136
2
CoroutineDispatcher(Default, IO)의 limitedParallelism 관련 질문
1
241
1
suspend 문의 드려요
2
131
2
스레드 양보 예제 + 코루틴/멀티스레드 사용 예시 질문
1
184
2
coroutineScope 관련 질문 및 실제 사용 사례에 대한 질문
1
258
3
Coroutine 취소 시점 체크
1
139
2
spring web mvc 환경에서 coroutine을 사용해보신 경험이 있으신지 궁금합니다.
1
323
2
코루틴이 멀티스레드의 단점을 해결했다는 부분에 대해 질문드립니다.
2
181
1
Dispatcher.IO의 동작원리
0
254
3
실무에서 runBlocking 와 CoroutineScope 실무 사용에 대해
0
238
2
Code3-6에서 imageProcessingDispatcher가 inline으로는 동작하지 않는 이유가 궁금합니다
1
121
2
공유 스레드 풀 질문드려요!
1
158
2
코루틴 이름 출력관련해서 질문이 있습니다!
2
160
1

