我正在试着用Kotlin协程来理解异步代码执行.
为什么在启动异步代码块时必须指定调度程序?
以下代码块
fun doInParallel(): Unit = runBlocking {
coroutineScope {
launch { println("start A").also { Thread.sleep(1_000) }.also { println("finish A") } }
launch { println("start B").also { Thread.sleep(1_000) }.also { println("finish B") } }
}
}
将始终打印
start A
finish A
start B
finish B
这并不是我所期望的.
仅在显式指定调度程序之后,异步代码块才会并行运行:
fun doInParallel(): Unit = runBlocking {
coroutineScope {
launch(Dispatchers.Default) { println("start A").also { Thread.sleep(1_000) }.also { println("finish A") } }
launch(Dispatchers.Default) { println("start B").also { Thread.sleep(1_000) }.also { println("finish B") } }
}
}
将打印
start A
start B
finish A
finish B
为什么我必须包括Dispatcher.Default
?
我用的是org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.0-Beta
(如果这有关系的话)