코루틴 취소 관련 질문
292
작성한 질문수 4
fun main(): Unit = runBlocking {
val job = launch {
var i = 1
var nextPrintTime = System.currentTimeMillis()
while (i <= 5) {
if(nextPrintTime <= System.currentTimeMillis()){
printWithThread("${i++}번째 출력!")
nextPrintTime += 1_000L
}
}
}
delay(100L)
job.cancel()
}수업 때 예시로 보여주신 코드인데 이 코드는 "5번째 출력!"까지 출력하고 끝이 나는데요.
반면에 아래 코드는 한번만 출력하고 끝이 납니다.
fun main(): Unit = runBlocking {
val job = launch {
var nextPrintTime = System.currentTimeMillis()
repeat(5) {
if (nextPrintTime <= System.currentTimeMillis()) {
printWithThread("${it + 1}번째 출력!!")
nextPrintTime += 1_000L
}
}
}
delay(100L)
job.cancel()
}이는 단순히 repeat문이 무한루프가 아니어서 나오는 차이일까요?
답변 1
0
안녕하세요 Olive님! 질문 주셔서 감사합니다! 😊
네네 맞습니다, repeat 문이기 때문에 다음과 같이 동작하는 것으로 생각해주시면 되어요!
repeat(5) {
if (...)
}
각 코드 한 줄 한 줄 마다 대략적으로 1ms가 걸린다고 생각해보자! (실제로는 1ms 보다 더 적게 걸릴겁니다!) 또한, repeat 으로 코드가 넘어오기 전
nextPrintTime = 0이라고 생각하자.그럼 최초 repeat이 수행되면, 0 <= 1 이니 if 조건이 true이고 if 안의 코드가 실행될겁니다.
이때 한 번 출력이 되고,
nextPrintTime = 1000이 되겠죠!
다음으로 두 번째 repeat이 수행될 건데, 코드 한 줄당 1ms가 걸리면 잘 쳐줘도 4~5ms 정도 지났을테니
1000 <= 4라서 if 조건이 false가 됩니다.따라서 두 번째 repeat은 pass될거에요!
비슷하게 세 번째 repeat은 1000 <= 5라서 false, 네 번째 repeat 역시 false, 다섯 번째까지 false가 나오면서 최종적으로 한 번만 출력된 이후 프로그램은 종료하게 됩니다.
만약 무한루프였다면, 어쨌거나 5번의 출력을 할동안 위의 과정을 수백번, 수천번 반복하겠지만 repeat은 말 그대로 N번 시도 이후 해당 반복을 종료해버리니 위와 같은 차이가 발생하게 됩니다!
강의 보시면서 또 궁금한 점 있으시면 편하게 질문 주세요!
감사합니다!! 😊 🙇
Dispatchers 별 차이점 관련 질문
0
91
1
코루틴과 가상 스레드의 차이가 궁금합니다.
1
307
2
Coroutine과 ThreadLocal관련 질문
0
152
2
선생님 강의를 듣고 크롤링에 코루틴을 적용해보고 있습니다. 그런데 코루틴이 하나만 나와서 동시처리가 안되는데 혹시 봐주실 수 있나요??
1
114
1
7강에 대해서 궁금증이 있는데요
1
116
2
Spring MVC에서 corountine 활용 방안
1
538
1
9강 코루틴 중단과 재개관련 문의 드립니다.
0
124
2
suspend 함수에 관해 추가적인 질문 있습니다! (runcatching, Result)
0
126
1
간단 질문.. join() vs delay()
0
157
2
코루틴을 잘 사용하고 있는지 궁금합니다.
0
196
1
CoroutineScope & Dispatcher 질문
0
160
2
async await 관련 질문
1
135
2
코루틴 실행 순서 궁금합니다.
1
231
2
corutine task에 대한 질문
1
195
2
completing의 존재의의가 궁금합니다.
1
161
1
코루틴 dispatcher IO관련 질문
0
187
1
Job 질문이 있습니다
1
203
1
스프링 MVC 환경에서의 코루틴
1
2093
1
자식1, 2와 부모코루틴의 관계
1
225
1
한 suspend fun 의 반환값이 다른 suspend fun의 파라미터로 쓰일 때
1
329
2
delay 함수에 대해 질문이 있습니다
1
392
1
runBlocking을 사용하는 경우가 있을까요?
0
399
1
delay가 없으면 실행 안 되는 이유
0
294
1
코루틴 스코프
0
312
1





