해결된 질문
작성
·
383
답변 1
0
안녕하세요 파이팅해야지님! 질문 주셔서 감사합니다! 🙂
핵심 적인 부분은 yield()
2개를 동시에 지운다는 점이에요!
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield() // 1번, yield를 제거한다면?!
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield() // 2번, yield를 제거한다면?!
println("${num1 + num2}")
}
이 경우는 다음과 같이 동작합니다.
main
함수가 실행되고
launch
를 이용해 새로운 코루틴이 시작! (되었으나 해당 코루틴이 즉시 실행되지는 않는다)
따라서 launch 아래의 1번 yield
로 넘어옴
yield
에 의해 main 루틴이 실행을 new 루틴에게 양보
newRoutine
함수로 넘어와 변수 선언 이후 다시 2번 yield가 실행
yield
에 의해 다시 main 루틴으로 넘어와 END 출력
main 루틴이 종료되었으므로 newRoutine
으로 넘어와 println
출력
그리고 yield()
를 함께 지우면 아래와 같은 코드가 되는데요!
fun main(): Unit = runBlocking {
println("START")
// 새로운 코루틴 시작!
launch {
newRoutine()
}
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
println("${num1 + num2}")
}
이때 새로운 코루틴을 launch
로 시작한다고 해서 반드시 해당 코루틴이 먼저 실행되는게 아닙니다.
따라서 이 경우는 아래와 같이 동작합니다!
main
함수가 실행되고
launch
를 이용해 새로운 코루틴이 시작! (되었으나 해당 코루틴이 즉시 실행되지는 않는다)
따라서 main 함수의 END를 출력
main 루틴이 종료되었으므로 newRoutine
으로 넘어와 println
출력
답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙇
아 yield 함수가 없으면 그냥 처음 시작된 코루틴을 그대로 진행하고 그게 끝나면 도중에 시작된 코루틴이 이어서 시작되는거군요! 친절한 답변 감사드립니다^^