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"
}
代码:
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"
}