vac*_*ach 8 kotlin kotlin-coroutines
鉴于我们有一个挂起函数但this不是 a CoroutineScope,我们如何启动其他协程,使其与运行此suspending函数的任何对象的当前范围相关联?
每个可挂起的函数都可以访问全局变量coroutineContext,您可以简单地将CoroutineScope其包装在 中,但这不是其预期目的。它在那里,因此您可以随时检查您的协程是否被取消,获取调试信息(如作业名称等)。
用 Roman Elizarov 在他最近的Medium 帖子中的话来说:
Run Code Online (Sandbox Code Playgroud)suspend fun doNotDoThis() { CoroutineScope(coroutineContext).launch { println("I'm confused") } }不要这样做!
一个可挂起的函数不应该触发它返回后可能继续的并发工作。它应该只使用并发来实现任务的并行分解,这意味着它将等待所有子协程完成。
您应该决定使用作为接收者的普通函数CoroutineScope(表示启动并发工作的意图)或使用等待其启动的所有工作完成的可挂起函数。
所以,如果你想要并行分解,那么使用一个coroutineScope或者,可能是一个supervisorScope块:
coroutineScope {
launch {
// ... task to run in the background
}
// ... more work while the launched task runs in parallel
}
// All work done by the time we reach this line
Run Code Online (Sandbox Code Playgroud)
coroutineScope 是一个可挂起的函数,在它启动的所有协程完成之前它不会完成。
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |