我目前正在学习协程。 我正在关注 JetBrains 的动手实践:协程和通道简介。 在Structured concurrency部分,他们提到了这个:
通过使用
函数,可以在不启动新协程的情况下创建新作用域。要在coroutineScope
函数内以结构化方式启动新协程而无需访问外部作用域,您可以创建一个新协程作用域,它自动成为调用此suspend
函数的外部作用域的子作用域。suspend
假设在 CoroutineScope 中,我正在调用一个函数 loadUsers。这 3 个实现给了我相同的结果:
suspend fun loadUsers(): List<User> {
coroutineScope {
//...
}
}
suspend fun loadUsers(): List<User> {
CoroutineScope(Dispatchers.Default).run {
//...
}
}
suspend fun CoroutineScope.loadUsers(): List<User> {
//...
}
注意:在正文中,我启动了多个协程。完整的功能代码可以在Hands-on中找到(为简单起见在问题中进行了修改)。
有人可以回答这两个问题吗:
提前致谢。
我已经看到了这个:Kotlin 中的 CoroutineScope 和 coroutineScope 之间的区别,但是正如我提到的,这 3 种样式给了我相同的结果,所以我仍然对此感到困惑。