nitrog42
10/20/2020, 10:07 AMMutableSharedFlow(replay = 0)
doesn't emit values ? đ the same code works if replay = 1 (but I don't want to replay first value each time đ˘ )Marc Knaup
10/20/2020, 10:16 AMnitrog42
10/20/2020, 10:17 AMnitrog42
10/20/2020, 10:18 AMnitrog42
10/20/2020, 10:18 AMMarc Knaup
10/20/2020, 10:19 AMnitrog42
10/20/2020, 10:19 AMnitrog42
10/20/2020, 10:20 AMfun main() {
val mSharedFlow = MutableSharedFlow<Int>(extraBufferCapacity = 10)
val sharedFlow: SharedFlow<Int> = mSharedFlow.asSharedFlow()
val scope = CoroutineScope(Dispatchers.Default)
val job = scope.launch {
sharedFlow.collect {
println("got $it")
if (it == 0) {
cancel()
}
}
}
runBlocking {
mSharedFlow.emit(1)
mSharedFlow.emit(2)
mSharedFlow.emit(0)
}
}
nitrog42
10/20/2020, 10:20 AMnitrog42
10/20/2020, 10:20 AMnitrog42
10/20/2020, 10:21 AMnitrog42
10/20/2020, 10:21 AMMarc Knaup
10/20/2020, 10:21 AMnitrog42
10/20/2020, 10:23 AMMarc Knaup
10/20/2020, 10:23 AMnitrog42
10/20/2020, 10:23 AMval mSharedFlow = MutableSharedFlow<Int>(extraBufferCapacity = 1, onBufferOverflow = BufferOverflow.DROP_LATEST)
Marc Knaup
10/20/2020, 10:23 AMnitrog42
10/20/2020, 10:24 AMMarc Knaup
10/20/2020, 10:24 AMStateFlow
and replays?nitrog42
10/20/2020, 10:24 AMMarc Knaup
10/20/2020, 10:25 AMnitrog42
10/20/2020, 10:26 AMMarc Knaup
10/20/2020, 10:27 AMSharedFlow
with no replay makes most sense. What should happen on backpressure?nitrog42
10/20/2020, 10:27 AMnitrog42
10/20/2020, 10:28 AMMarc Knaup
10/20/2020, 10:29 AMtryEmit
with a DROP_LATEST
buffer should be fine.
A shared flow configured with a BufferOverflow strategy other than SUSPEND (either DROP_OLDEST or DROP_LATEST) never suspends on emit, and thus tryEmit to such a shared flow always returns true.
nitrog42
10/20/2020, 10:30 AM