Kotlin暂停功能是否被阻止?

时间:2020-10-04 08:02:06

标签: kotlin kotlin-coroutines coroutine suspend

代码:

suspend fun main() {
    println("main start")
    f1()
    println("main end")
}

suspend fun f1() {
    println("f1 start")
    delay(2_000)
    println("f1 end")
}

实际输出:

main start
f1 start
f1 end
main end

我的预期输出

main start
f1 start
main end
f1 end

这是否意味着suspend函数正在与JS不同地阻塞?

1 个答案:

答案 0 :(得分:2)

这是默认行为,有关更多信息有关挂起函数here的信息,如果要异步运行f1,则必须使用async作为

suspend fun main() {
    withContext(Dispatchers.Main) {
        println("main start")//Run in main
        val getF1 = async(Dispatchers.IO) { f1() } // Run f1 in IO
        println("main end") // Run in main
        println(getF1.await())//Run in main
    }
}

suspend fun f1() : String {
    println("f1 start")
    delay(2_000)
    println("f1 end")
    return "f1 result"
}