Есть ли канал Kotlin Coroutines, эквивалентный onDispose RxJava?

Если я продлю Observable<> в RxJava я могу переопределить OnDispose()и выполнить очистку, например очистку вещей для сборщика мусора.

OnDispose() вызывается всякий раз, когда любая подписка на это Observable<> утилизируется.

Тем не менее, я не могу найти ничего эквивалентного для каналов сопрограмм.

Я знаю о channel.close(), но это не то же самое.

Есть ли способ размножения либо

  • приостановка отмены сопрограмм на канале; или же
  • удаление / отмена подписки на канал?

1 ответ

Я полагаю, вы говорите о doOnDispose в RxJava. В этом случае вы отправляете элементы на канал и хотели бы знать, когда нисходящий канал отменил канал. Если вы структурируете производящий код в одну функцию, вы можете просто использовать try/finally:

val channel = produce { 
    // channel producing code is here
    try {
        // this example is sending 10 ints, but it can be any other code
        repeat(10) { send(it) }
    } finally {
        // doOnDispose here!
    }
}

Если ваш код отправки распределен, и вы хотите получить обратный вызов отмены, вы можете использовать SendChannel.invokeOnClose

Другие вопросы по тегам