代码:
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不同地阻塞?
答案 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"
}