Обновить

Комментарии 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

Этого хватило, дальше не читал.

Спасибо большое за внимательное прочтение и подсветы. Действительно, опубликовал неточные листинги, поскольку несколько раз изменял код и упрощал его для лаконичности, получилось много помарок с листингами. В статье поправил указанные моменты, проверил валидность приведенного вывода программы

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
www.wildberries.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия