Skip to content

Instantly share code, notes, and snippets.

@androiddevcoding
Created March 28, 2024 13:29
Show Gist options
  • Save androiddevcoding/586a7402dac53388f1506d26607874d7 to your computer and use it in GitHub Desktop.
Save androiddevcoding/586a7402dac53388f1506d26607874d7 to your computer and use it in GitHub Desktop.
Практические примеры для понимания параметров в MutableSharedFlow
package coroutines
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.MutableSharedFlow
/**
* Пример использования extraBufferCapacity для MutableSharedFlow
*/
fun main() = runBlocking {
val coroutineScope = CoroutineScope(Dispatchers.Default)
val stateFlow = MutableSharedFlow<Int>(extraBufferCapacity = 2)
// Для понимания разницы замените stateFlow на:
// val stateFlow = MutableSharedFlow<Int>(extraBufferCapacity = 0)
// Данные приходит перестанут
println(stateFlow.replayCache)
coroutineScope.launch {
stateFlow.collect {
delay(1000)
println("collect1: $it")
}
}
delay(120)
// Если использовать emit а не tryemit данных приходить будут так как:
// tryEmit(в отличие от emit) не является приостанавливающей функцией
// https://github.com/Kotlin/kotlinx.coroutines/issues/2387?ref=blog.danlew.net#issuecomment-727220851
stateFlow.tryEmit(1)
stateFlow.tryEmit(2)
while (coroutineScope.isActive) {
}
}
package coroutines
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.MutableSharedFlow
/**
* Пример использования replay для MutableSharedFlow
*/
fun main() = runBlocking {
val coroutineScope = CoroutineScope(Dispatchers.Default)
val stateFlow = MutableSharedFlow<Int>(replay = 2)
// Для понимания разницы замените stateFlow на:
// val stateFlow = MutableSharedFlow<Int>(replay = 0)
// Данные приходит перестанут
stateFlow.tryEmit(1)
stateFlow.tryEmit(2)
println(stateFlow.replayCache)
coroutineScope.launch {
stateFlow.collect {
println("collect1: $it")
}
}
coroutineScope.launch {
stateFlow.collect {
println("collect2: $it")
}
}
delay(1000)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment