有谁能解释一下viewModelScope中这3个协程之间的区别吗?
viewModelScope.launch {
launch {}
launch {}
}
viewModelScope.launch {
viewModelScope.launch {}
viewModelScope.launch {}
}
viewModelScope.launch {
coroutineScope {
launch {}
}
coroutineScope {
launch {}
}
}
我很确定第一个,2个子协程被启动,如果一个产生了一个异常而没有处理,它将传播到父协程,另一个将被取消,父协程将在最后被取消。
1条答案
按热度按时间uidvcgyl1#
大多数协程构建器函数,如
coroutineScope()
,withContext()
,launch()
等,提供了一个CorouineScope
作为this
,这个作用域可以被认为是“当前”协程。如果我们使用这个对象来启动新的协程,这意味着它们成为当前协程的子对象。如果我们使用另一个协程作用域,则新的协同程序是该协同程序范围的子程序,并且通常与当前协同程序无关。这意味着:
launch {}
-它启动一个新的协程作为当前协程的子进程。viewModelScope.launch {}
-新协程是viewModelScope
的子协程,它与当前协程无关。在您的特定情况下,新协程是调用协程的兄弟。coroutineScope { launch {} }
-这和1差不多。