Kotlin中的生命周期kotlinx.coroutines.coroutineScope是多少?
以下代码来自 Kotlin中的生存期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
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。