我想知道是否coroutineScope
工作完成后将自动取消。假设我创建了一个coroutineScope
在自定义类中而不是 ViewModel
类或Fragment / Activity
class:
class MyClass {
private val backgroundScope = CoroutineScope(Dispatchers.Default)
fun doSomething() = backgroundScope.launch {
//do background work
}
}
在这种情况下,之后背景工作完成后,会backgroundScope
自动取消?
A CoroutineScope
由一个CoroutineContext
. A CoroutineContext
由 2 个主要元素组成,aJob
and a ContinuationInterceptor
(通常只是一个CoroutineDispatcher
),其他元素是CoroutineExceptionHandler
and CoroutineName
.
如果协程完成,它不会取消作用域(即它的作业)。
即使您取消协程的作业,它也不会取消作用域(即它的作业)。因为每次使用特定作用域触发协程时,协程的作业都会成为该作用域作业的子作业。
在你的情况下backgroundScope
,您没有指定Job
你自己,如果你深入研究源代码,你会发现在没有Job
, a Job
提供实例..
val coroutineJob = backgroundScope.launch { ... }
当这个coroutineJob
完成或被取消,不会取消Job
在 - 的里面backgroundScope
,因此backgroundScope
不会被取消。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)