Use Case
Фрагмент Android, который потребляет предметы T
из ReceiveChannel<T>
.После употребления T
s следует удалить из ReceiveChannel<T>
.
Мне нужен ReceiveChannel<T>
, который поддерживает потребление предметов из него.Он должен функционировать как очередь FIFO.
В настоящее время я подключаюсь к каналу из своего пользовательского интерфейса, например:
launch(uiJob) { channel.consumeEach{ /** ... */ } }
Я отключаюсь, вызывая uiJob.cancel()
.
Желаемое поведение:
val channel = Channel<Int>(UNLIMITED)
channel.send(1)
channel.send(2)
// ui attaches, receives `1` and `2`
channel.send(3) // ui immediately receives `3`
// ui detaches
channel.send(4)
channel.send(5)
// ui attaches, receiving `4` and `5`
К сожалению, когда я отсоединяюсь от канала, канал закрывается.Это заставляет .send(4)
и .send(5)
генерировать исключения, потому что канал закрыт.Я хочу иметь возможность отсоединиться от канала, чтобы он оставался пригодным для использования.Как я могу это сделать?
Channel<Int>(UNLIMITED)
идеально подходит для моего варианта использования, за исключением , который закрывает канал, когда он отписывается.Я хочу, чтобы канал оставался открытым.Это возможно?