【发布时间】:2018-11-21 13:15:27
【问题描述】:
在阅读了CoroutineScope 的介绍和javadoc 之后,我仍然有点困惑CoroutineScope 背后的想法是什么。
文档的第一句话“定义新协程的范围”。我不清楚:为什么我的协程需要范围?
另外,为什么不推荐使用独立的协程构建器?为什么这样做更好:
fun CoroutineScope.produceSquares(): ReceiveChannel<Int> = produce {
for (x in 1..5) send(x * x)
}
而不是
fun produceSquares(): ReceiveChannel<Int> = produce { //no longer an extension function
for (x in 1..5) send(x * x)
}
【问题讨论】:
-
我发现这个 github 问题中的描述很有用:github.com/Kotlin/kotlinx.coroutines/issues/410。正如那里解释的那样,“......像
launch { ... }和async { ... }这样的协程构建器默认启动一个全局协程......这似乎是一个错误的默认值。全局协程容易出错。”现在,如果您愿意,您仍然可以通过使用GlobalScope来执行与旧行为相同的操作,但这意味着您明确地执行此操作而不是意外执行此操作。并且建议在大多数情况下不要使用GlobalScope -
取消作业的子项