Kotlin中的生命周期kotlinx.coroutines.coroutineScope是多少?

Kotlin中的生命周期kotlinx.coroutines.coroutineScope是多少?,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,以下代码来自 Kotlin中的生存期kotlinx.coroutines.coroutineScope是多少?一旦给定的块及其所有子协同例程完成,此函数是否会返回saveTask 如果我将ViewModel.viewModelScope传递给DefaultTasksRepository而不是kotlinx.coroutines.coroutineScope,有什么区别 顺便说一句,代码A似乎没有传递任何CoroutineScope对象,为什么 代码A import kotlinx.corouti

以下代码来自

Kotlin中的生存期
kotlinx.coroutines.coroutineScope
是多少?一旦给定的块及其所有子协同例程完成,此函数是否会返回
saveTask

如果我将
ViewModel.viewModelScope
传递给
DefaultTasksRepository
而不是
kotlinx.coroutines.coroutineScope
,有什么区别

顺便说一句,代码A似乎没有传递任何CoroutineScope对象,为什么

代码A

import kotlinx.coroutines.coroutineScope
...

class DefaultTasksRepository(
    private val tasksRemoteDataSource: TasksDataSource,
    private val tasksLocalDataSource: TasksDataSource,
    private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
) : TasksRepository {

   ...
   override suspend fun saveTask(task: Task) {
        coroutineScope {
            launch { tasksRemoteDataSource.saveTask(task) }
            launch { tasksLocalDataSource.saveTask(task) }
        }
    }

    ...
}
代码B

object ServiceLocator {

    private val lock = Any()
    private var database: ToDoDatabase? = null

    ...

    private fun createTasksRepository(context: Context): TasksRepository {
        val newRepo = DefaultTasksRepository(FakeTasksRemoteDataSource, createTaskLocalDataSource(context))
        tasksRepository = newRepo
        return newRepo
    }

   ...
}
添加内容

致Animesh Sahu:谢谢

您确定“coroutineScope是创建coroutineScope的工厂函数”吗?以下代码是源代码,返回值似乎不是
coroutineScope
的对象

源代码

  public suspend fun <R> coroutineScope(block: suspend CoroutineScope.() -> R): R =
    suspendCoroutineUninterceptedOrReturn { uCont ->
        val coroutine = ScopeCoroutine(uCont.context, uCont)
        coroutine.startUndispatchedOrReturn(coroutine, block)
    }
publicssuspendcoroutinescope(块:suspendcoroutinescope.(->R):R)=
SuspendCoroutineUnterceptedorReturn{uCont->
val coroutine=ScopeCoroutine(uCont.context,uCont)
协同程序。startUndispatchedOrReturn(协同程序,块)
}
A是一个工厂函数,它创建的上下文与调用的上下文相同,但覆盖了该上下文的作业

CoroutineScope
具有生存期,直到通过对其调用
cancel()
或调用
CoroutineScope.coroutineContext
或显式调用附加作业
coroutineContext[job].cancel()将其取消

coroutineScope
只是一个包装器,它创建立即的
coroutineScope
,并在执行子对象后取消自身


PS:coroutineScope函数用于与新作业实例并行分解任务,以控制其子项

谢谢!请你看看我在问题中添加的内容好吗?@HelloCW它不返回它,它将它作为接收器传递到lambda。