【发布时间】:2017-09-16 23:10:19
【问题描述】:
我在我的演示 android 应用程序中使用 Kotlin 和 Coroutines。
这是我所拥有的:
fun testCoroutine3() = runBlocking {
var num = 0
val jobs = List(10_000) { // create a lot of coroutines and list their jobs.
launch(CommonPool) {
delay(1000L)
println(num++)
}
}
for(job in jobs) {
job.join() //wait for all jobs to finish
}
println("FINAL RESULT $num")
}
基本上,我正在创建一个包含 10,000 个协程的列表,它们等待 1 秒并打印一个数字,然后将其递增。
然后,当所有作业都完成后,我会打印最终结果。
(本演示取自GitHub Documentation)
现在我的大部分测试运行良好,所有协程几乎同时运行,我的最终结果是 10000
但在极少数情况下,我得到的最终结果是 9,999
例如,当我将数字增加到 50,000 时,这一点变得更加明显:
当有很多协程时,Kotlin 是否可能会跳过一些协程?在 50,000 上,看起来它跳过了 2
或者这里发生了什么其他事情?
【问题讨论】: