Remy Benza
03/22/2021, 9:28 AMSupervisorJob?Remy Benza
03/22/2021, 9:30 AMval scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
scope.launch {
flow1.collect { //code }
flow2.collect { //code }
}Remy Benza
03/22/2021, 9:31 AMNatsuki(开元米粉实力代购)
03/22/2021, 9:36 AMSupervisorJob , that's becoz in semantic flow is cold, thus when runs flows2.collect that indicate flow1.collect is done, use launchIn or fire another launch with each collectKamilH
03/22/2021, 9:47 AMcollect is a suspend function so it suspends until flow1 finishes. It’s always better to use onEach + launchIn combinationRemy Benza
03/22/2021, 9:48 AMKamilH
03/22/2021, 9:51 AMflow1.onEach {
// handle new value here
}.launchIn(scope)
scope.launch {
flow1.collect {
// handle new value here
}
}KamilH
03/22/2021, 9:53 AMKamilH
03/22/2021, 9:56 AMflow1.onEach {
}.launchIn(viewModelScope)
flow2.onEach {
}.launchIn(viewModelScope)
without waiting for flow1 to finish, while here:
viewModelScope.launch {
flow1.collect {
}
flow2.collect {
}
}
flow2.collect will be called only after flow1 finishedRemy Benza
03/22/2021, 9:59 AMKamilH
03/22/2021, 10:03 AMJob case whole job would be cancelled while in SupervisorJob it wouldn’tdewildte
03/22/2021, 1:41 PMSupervisorJob then the scope will not be canceled.dewildte
03/22/2021, 1:44 PMdewildte
03/22/2021, 1:47 PM.collect does not start a new coroutine, it just suspends the current coroutine until the collection is complete.Remy Benza
03/22/2021, 3:00 PM