А
Работай с ней так же.
Size: a a a
А
EP
А
EP
BP
BP
EP

StateFlow, но уже, похоже, не хочу :)BP

StateFlow, но уже, похоже, не хочу :)EP
RxJava, где Hot и Cold observables позволяют менять контекст вычислений ниже по потоку. А тут начал изучать StateFlow и вижу, flowOn deprecated. Вот и хотел узнать а что если вдруг надо поменять контекст ниже по потоку, как это верно сделатьEP
map возвращается уже обычный flow, надо будет потестироватьBP
RxJava, где Hot и Cold observables позволяют менять контекст вычислений ниже по потоку. А тут начал изучать StateFlow и вижу, flowOn deprecated. Вот и хотел узнать а что если вдруг надо поменять контекст ниже по потоку, как это верно сделатьА
RxJava, где Hot и Cold observables позволяют менять контекст вычислений ниже по потоку. А тут начал изучать StateFlow и вижу, flowOn deprecated. Вот и хотел узнать а что если вдруг надо поменять контекст ниже по потоку, как это верно сделатьEP
А
EP
EP
@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, после трансформаций уже работаетА
А
@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
EP