CoroutineScope vs coroutineScope vs CoroutineScope 扩展函数

问题描述 投票:0回答:0

我目前正在学习协程。 我正在关注 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中找到(为简单起见在问题中进行了修改)。

有人可以回答这两个问题吗:

  • 3 种实现之间有什么区别?
  • 他们是不是有些用例需要 coroutineScope(小写 C)并且没有它就无法完成?

提前致谢。

我已经看到了这个:Kotlin 中的 CoroutineScope 和 coroutineScope 之间的区别,但是正如我提到的,这 3 种样式给了我相同的结果,所以我仍然对此感到困惑。

kotlin concurrency coroutine structured-concurrency
© www.soinside.com 2019 - 2024. All rights reserved.