gpt4 book ai didi

kotlin - Job 作为 CoroutineScope 和 launch 的参数有什么不同?

转载 作者:行者123 更新时间:2023-12-02 18:48:36 24 4
gpt4 key购买 nike

这两个代码运行完全相同。将 Job 放入 CoroutineScope 并启动有什么不同?

private val job = CoroutineScope(Dispatchers.Main).launch(start = CoroutineStart.LAZY) {
for(i in 10 downTo 0) {
Log.d("test", ": $i")
delay(1000)
}
}

CoroutineScope(Dispatchers.Main+job).launch{ }

CoroutineScope(Dispatchers.Main).launch(job) { }

最佳答案

从技术上讲,两者都会导致相同的行为,但要点是两者都不是使用 CoroutineScope() 工厂的好方法。这是编写相同内容的惯用方式:

GlobalScope.launch(Dispatchers.Main+job) { ... }

如果这引起了您的注意(“不要使用 GlobalScope!”),那是因为它应该 — 您的示例只是犯同样错误的另一种方式,代码更冗长。您构造一个 CoroutineScope 而不持有对它的引用,从而导致与 GlobalScope 单例完全相同的无限和不可取消的范围。

此外,您使用作为实际协程句柄的 Job 实例的方式也是错误的:与协程范围关联的作业应该是从 Job()SupervisorJob()。它的唯一目的是作为取消整个作用域或检查其状态的中心点。

关于kotlin - Job 作为 CoroutineScope 和 launch 的参数有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67095434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com