【发布时间】:2020-02-14 22:17:18
【问题描述】:
考虑以下 kotlin 中的代码。
val scope = CoroutineScope(Dispatchers.Main + Job())
scope.launch {
println("inside coroutine")
}
println("outside coroutine")
我们在 Main(UI) 线程中创建了一个协程,协程后面还有一些代码。
我知道在实际代码中这样做没有多大意义,但这只是一个理论问题。
考虑到协程在主线程中运行,为什么总是先执行 println("outside coroutine")?
我原以为有时我会首先看到协程之外,而其他时候,我会首先看到协程内部,有点像像两个线程。
谁(OS 或 Coroutines 实现)决定先运行协程之外的 coe?
【问题讨论】:
-
Dispatchers.Main在主循环器上运行。任何在其上launched 的协程都将排队等待执行,因此它将始终稍后运行,因为主循环器将首先执行其他“东西”(生命周期方法、ui 回调等)。
标签: android kotlin coroutine kotlin-coroutines