Ser*_*gey 6 android kotlin kotlin-coroutines coroutinescope structured-concurrency
在 Kotlin 中启动协程有多种方法。我发现了几个使用GlobalScope和的例子CoroutineScope。但后一个是在启动协程时直接创建的:
使用GlobalScope:
fun loadConfiguration() {
GlobalScope.launch(Dispatchers.Main) {
val config = fetchConfigFromServer() // network request
updateConfiguration(config)
}
}
Run Code Online (Sandbox Code Playgroud)
使用CoroutineScope实例,在启动协程时直接创建:
fun loadConfiguration() {
CoroutineScope(Dispatchers.Main).launch {
val config = fetchConfigFromServer() // network request
updateConfiguration(config)
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这两种方法有区别吗?
第二种情况不是违反了结构化并发的原则吗?
第二种情况不是违反了结构化并发的原则吗?
实际上,这两种情况都同样违反了它,因为它们具有几乎完全相同的语义。您可能遇到过的所有反对使用的警告都同样GlobalScope.launch适用。CoroutineScope().launch一个细微的区别是后者完全没有意义,而前者至少有一些合法的用例。
写作CoroutineScope().launch反而会GlobalScope.launch掩盖意图和后果,并且每次都会创建一个不必要的对象。
我认为这个CoroutineScope().launch习语的出现仅仅是因为它规避了您收到的警告GlobalScope.launch。
| 归档时间: |
|
| 查看次数: |
9684 次 |
| 最近记录: |