fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield()
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield()
println("${num1 + num2}")
}
// 결과
START
END
3
runBlocking
: 일반 루틴 세계와 코루틴 세계를 연결하는 함수
launch
: 새로운 코루틴을 만드는 함수2 , 주로 반환값이 없는 코루틴을 만드는데 사용한다.→ 즉, 우리는 두 개의 코루틴을 만든 것이다.
yield
: 양보하다는 뜻인데, 지금 코루틴 실행을 멈추고 다른 코루틴이 실행되도록 양보하는 기능이다.suspend fun
: suspend 라는 키워드가 붙으면 다른 suspend 함수를 호출하는 능력을 갖게 된다.main 코루틴이 runBlocking에 의해 실행되고 START 출력
launch에 의해 새로운 코루틴 생성 → but 바로 실행이 일어나진 않는다.
main의 yield()가 실행되어 new 코루틴에 실행을 양보한다.
newRoutine 함수가 실행되고 그 안에서 또 yield() 가 실행되어 main 코루틴으로 돌아온다.
main 루틴은 END를 출력하고 종료된다.
아직 newRoutine이 끝나지 않았으니 newRoutine으로 돌아가서 3 출력되고 프로그램 종료