来自上述代码链接的片段:
override suspend fun activateTask(taskId: String) {
withContext(ioDispatcher) {
(getTaskWithId(taskId) as? Success)?.let { it ->
activateTask(it.data)
}
}
}
override suspend fun clearCompletedTasks() {
coroutineScope {
launch { tasksRemoteDataSource.clearCompletedTasks() }
launch { tasksLocalDataSource.clearCompletedTasks() }
}
}
override suspend fun deleteAllTasks() {
withContext(ioDispatcher) {
coroutineScope {
launch { tasksRemoteDataSource.deleteAllTasks() }
launch { tasksLocalDataSource.deleteAllTasks() }
}
}
}
override suspend fun deleteTask(taskId: String) {
coroutineScope {
launch { tasksRemoteDataSource.deleteTask(taskId) }
launch { tasksLocalDataSource.deleteTask(taskId) }
}
}
什么时候使用哪个?
有时 coroutineScope { launch { code } }
位于 withContext(iODispatcher)
内!
何时使用:coroutineScope { launch { code } }
何时使用:withContext(iODispatcher)
何时嵌套使用它们:coroutineScope { launch { code } }
在 withContext(iODispatcher)
内
答案 0 :(得分:0)
var timezone = /\b(?:[PMCEA][SDP]T|(?:Eastern|European|Summer) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{3})?)\b/g;
应该用于将 withContext(ioDispatcher)
内部运行的阻塞 IO 任务卸载到共享线程池。
{}
创建一个子作用域,它从父作用域的协程上下文继承 coroutineContext。它应该用于“并行分解工作”。这也意味着当作用域中的任何子协程失败时,作用域和任何其他子作用域也将被取消