gpt4 book ai didi

kotlin - 从挂起的函数启动协程

转载 作者:行者123 更新时间:2023-12-04 18:18:57 24 4
gpt4 key购买 nike

鉴于我们有一个挂起函数,但 this不是 CoroutineScope ,我们如何启动其他协程,以便这些协程与运行此的任何内容的当前范围相关联 suspending功能?

最佳答案

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

用 Roman Elizarov 在他最近的 Medium post 中的话来说:

suspend fun doNotDoThis() {
CoroutineScope(coroutineContext).launch {
println("I'm confused")
}
}

Do not do this!



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

您应该决定使用一个普通函数作为 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是一个可挂起的函数,在它启动的所有协程完成之前它不会完成。

关于kotlin - 从挂起的函数启动协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55103285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com