Комментарии 4
На протяжении всей статьи публикуем книги в emailService, а подписываемся на bookService
В первом листинге публикуется не тот же самый объект Book, что был залоггирован. Сути не меняет, но подобное поведение это потенциальная точка отказа
val newBook = Book(i).apply {
println("publish new book part $i")
}
bookService.emit(Book(i)) А тут вывод не совпадает с программой
// вариант 1
private val bookService = MutableSharedFlow<Book>(
extraBufferCapacity = 1
)
// вариант 2
private val bookService = MutableSharedFlow<Book>(
replay = 1
)
suspend fun subscribeToBookShop() {
bookService.collect { newBook ->
println("read book part №${newBook.part}")
delay(ONE_MONTH)
}
}
fun publishNewBook() {
for(i in 1..3) {
val newBook = Book(i).apply {
println("publish new book part $i")
}
bookService.tryEmit(newBook)
delay(ONE_WEEK)
}
}
// Вывод программы
// publish new book part №1
// №1 isPublished true
// read book part №1
// publish new book part №2
// №2 isPublished true
// publish new book part №3
// №3 isPublished false
// read book part №2Этого хватило, дальше не читал.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Информация
- Дата регистрации
- Дата основания
- Численность
- свыше 10 000 человек
- Местоположение
- Россия
Исследуем SharedFlow: emit vs tryEmit, как использовать replay и bufferCapacity