给定我们有一个暂停函数,但this不是CoroutineScope,我们如何启动其他协程,以使它们与运行suspending函数的当前范围相关联?

最佳答案

每个可挂起的函数都可以访问全局变量coroutineContext,您可以将其琐细地包装在CoroutineScope中,但这不是其预期目的。它在那里,因此您可以随时检查协程是否已取消,到达调试信息(如作业名称等)。

用罗曼·伊里扎洛夫(Roman Elizarov)在他最近的Medium post中的话:



可挂起的函数不应触发可能在返回后继续进行的并发工作。它应该仅使用并发来实现任务的并行分解,这意味着它将等待所有子协程完成。

您应该决定使用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
coroutineScope是一个可挂起的函数,只有在它启动的所有协程完成后才能完成。

08-26 07:56