24.07.25 22:51 작성
·
95
1
이전 강의 설명에서
아래의 코드가 실행될 때 launch로 만든 코루틴이 바로 실행되지 않고 다음 코드로 넘어간다고 했는데
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
println("END")
}
왜 아래의 코드에서는 job 객체를 변수에 담으면 다음 코드로 넘어가는게 아니라 바로 실행이 되는건가요?
fun main(): Unit = runBlocking {
val job = launch {
(1..5).forEach {
printWithThread(it)
delay(500)
}
}
delay(1_000L)
job.cancel()
}
답변 1
1
2024. 07. 26. 15:56
안녕하세요 갸나다로님! 🙂 질문 주셔서 감사합니다.
결론부터 말씀드리면, 작성해주신 코드는 job 객체를 변수에 담더라도 다음 코드로 넘어갔는데, delay를 만나서 launch 안의 코드가 실행된 것입니다!
delay(1_000L)
함수 호출을 제외하고 실행시켜보시면, job을 만들자마자 job.cancel()
이 호출되며 표준 출력 없이 프로그램이 종료될거에요! 🙂
또 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~
감사합니다! 🙏
2024. 07. 26. 17:18
아! 그럼
launch
로 만든 코루틴 안에서 처음 2번 반복이 될때delay(500)
을 만나서runBlocking
의 코루틴이 재개되어도delay(1_000L)
때문에 1초가 지나기 전까지는 다시launch
의 코루틴으로 돌아가고 2번 째 반복이 끝나고delay(500)
을 만나서runBlocking
코루틴으로 넘어가면 그때job.cancel()
을 호출하게 된거라고 이해하면 될까요?