【发布时间】:2019-08-15 01:53:56
【问题描述】:
示例代码中的注释说 delay() 是非阻塞的。应该暂停吗?
https://kotlinlang.org/docs/reference/coroutines/basics.html
fun main() {
GlobalScope.launch { // launch new coroutine in background and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println("World!") // print after delay
}
println("Hello,") // main thread continues while coroutine is delayed
Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
}
【问题讨论】:
-
这是一个正确的描述,因为它没有阻塞任何线程,它只是暂停当前的协程。
-
非阻塞是计算机科学中定义明确的术语。根据定义,println("World!") 将立即运行,而不是等待 1 秒。如果您的意思不同,请勿使用此术语。
-
我的意思肯定不一样,我没看懂你想说什么。正如我刚刚解释的那样,延迟不是阻塞调用。
-
@Moira:延迟是暂停和非阻塞。乔佛里已经回答了。它不仅仅是“非阻塞”。
-
@Moira:正如你所说,“它只是暂停当前的协程”。为什么延迟电话的评论没有这样说?相反,评论是“非阻塞的”。这不是误导吗?