EP
StateFlow
несколько шире, чем только как замену LiveData
. Например, как замену ObservableEmitter
в некоторых случаях.Size: a a a
EP
StateFlow
несколько шире, чем только как замену LiveData
. Например, как замену ObservableEmitter
в некоторых случаях.BP
@Test
fun testStateFlow() {
runBlocking {
launch(GlobalScope.coroutineContext) {
val state = MutableStateFlow<Int>(1)
state
.onEach { log("First ${Thread.currentThread().name}") }
.flowOn(newSingleThreadContext("Thread1"))
.onEach { log("Second ${Thread.currentThread().name}") }
.flowOn(newSingleThreadContext("Thread2"))
.onEach { log("Third ${Thread.currentThread().name}") }
.launchIn(GlobalScope)
log("Emit ${Thread.currentThread().name}")
state.value = 1
delay(100)
}
}
}
fun log(s: String) {
System.out.println(s)
}
Emit main @coroutine#2
First Thread1 @coroutine#5
Second Thread2 @coroutine#4
Third DefaultDispatcher-worker-2 @coroutine#3
flowOn
не работает только непосредственно для StateFlow
, после трансформаций уже работаетEP
AM
launch(GlobalScope.coroutineContext)
выглядит достаточно дикоEP
AM
runBlocking { launch { ... } }
лонч вообще не нужен, runBlocking сам тоже создаёт контекстAM
EP
EP
BP
BP
AM
BP
EP
Y
АБ
BP
LS
a