【发布时间】:2020-10-04 08:02:06
【问题描述】:
代码:
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 那样阻塞?
【问题讨论】:
-
是什么让你觉得你会得到第二个输出? Kotlin 挂起函数是 Kotlin 协程支持的一部分 - 独特的卖点是它使异步代码看起来像同步代码一样。
-
我不明白这是非阻塞的。这不是拦路吗?在打印
main end之前,执行在f1()中等待2s。我对非阻塞的理解是执行不等待任何东西。一旦执行看到delay,它就会移动到下一条可用指令,即println("main end") -
执行等待。线程没有。这就是结构化并发的全部意义所在。最好将其建模和理解为回调。
标签: kotlin kotlin-coroutines coroutine suspend