Есть ли канал 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