异步似乎无法同时运行

时间:2019-12-05 08:02:35

标签: kotlin

以下代码使用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放在延迟之前还是之后都没有关系。我得到相同的结果。

1 个答案:

答案 0 :(得分:1)

这两个函数之间存在间隙的原因是您在打印行中调用它们的方式:

println("The answer is ${one.await() + two.await()}")

尝试将.await()更改为.launch()。 Await()调用该函数,然后停止直到完成。