Tob*_*ann 5 coroutine kotlin kotlin-coroutines
从文档中runBlocking很清楚为什么从协程中使用它没有意义,例如嵌套它。
它甚至明确指出:
不应在协程中使用此函数。
但是,可以这样做:
fun main(args: Array<String>) {
runBlocking {
runBlocking {
println("hi")
}
}
}
Run Code Online (Sandbox Code Playgroud)
(IntelliJ) IDE 有点抱怨

但代码编译并运行。
在更复杂的环境中意外完成会发生什么?崩溃?或者可能是死锁?
在更复杂的环境中意外操作会发生什么?崩溃?或者也许是死锁?
不,没有那样的事。其实runBlocking是专门为了支持嵌套而写的:
如果指定的调度程序是另一个事件循环
runBlocking,则此调用使用外部事件循环。
您提到的问题实际上与嵌套调用无关runBlocking,而是从协程调用任何阻塞代码的一般问题。我们使用协程的特定目的是避免阻塞线程,因此在协程内部调用阻塞函数通常是错误的。Thread.sleep()对于、java.io电话等,您会收到相同的警告。
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |