以下代码使用2个异步函数调用:
import kotlinx.coroutines.*
import kotlin.system.*
fun main() = runBlocking<Unit> {
val time = measureTimeMillis {
val one = async { doSomethingUsefulOne() }
val two = async { doSomethingUsefulTwo() }
println("The answer is ${one.await() + two.await()}")
}
println("Completed in $time ms")
}
suspend fun doSomethingUsefulOne(): Int {
delay(3000L) // pretend we are doing something useful here
println("first")
return 13
}
suspend fun doSomethingUsefulTwo(): Int {
delay(1000L) // pretend we are doing something useful here, too
println("second")
return 29
}
println导致先打印“ first”,然后再打印“ second”。但是根据文档,这些异步应该同时运行。但是由于第一个有3秒的延迟,所以为什么它的println首先运行?实际上,我将println放在延迟之前还是之后都没有关系。我得到相同的结果。
答案 0 :(得分:1)
这两个函数之间存在间隙的原因是您在打印行中调用它们的方式:
println("The answer is ${one.await() + two.await()}")
尝试将.await()更改为.launch()。 Await()调用该函数,然后停止直到完成。