Kotlin 暂停函数是否阻塞?

Are Kotlin suspend functions blocking?

代码:

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 不同是阻塞的?

这是默认行为阅读更多关于挂起函数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"
}