Continuation
을 이용해 구현되어있다.Continuation
에는 돌아왔을 때 실행할 코드의 정보가 wrapped-up 되어있다고 이해하면 편할 것이다.Continuation
이 들어있는 코드를 만들어준다.suspend fun getStockPrice(ticker: String): String {
return Java.net.URL("http...").readText()
}
즉 바이트코드를 보면 아래와 꼴의 함수로 생성된다. (물론 코틀린 코드로 생성되는건 아니다)
fun getStockPrice(ticker: String, cont: Continuation): Any
마지막으로 영상에서 제시한 Async 처리하는 코드를 보고 가자.
suspend fun measureTime(block: suspend () -> Unit) {
val start = System.nanoTime()
block()
val end = System.nanoTime()
println("${(end - start) / 1.0e9} seconds")
}
suspend fun work(num: Int): Int {
delay(1000L)
return num + 1
}
val list = mutableListOf(3, 7, 13)
fun main(): Unit = runBlocking {
launch {
measureTime {
val results = mutableListOf<Deferred<Int>>()
for (elm in list)
results += async { work(elm) }
for (result in results)
println(result.await())
}
}
}
코루틴에 대해 모르는 입장에서 소개 받는다는 느낌으로 정확히 이해되지 않는 것은 일단 받아들이는 식으로 맘편하게 영상을 봤다.
몇가지 발표 영상을 더 보고 공식문서 등으로 정확히 살펴봐야겠다.