Я ищу лучший способ избавиться от цепочки с циклом while (true) или оператором повтора.Проблема, с которой я столкнулся, заключается в том, что иногда, когда я располагаю цепочку и что-то еще выполняется в цепочке (например, запись в сокет), результат / исключение не доставляются.Скорее всего исключение, потому что сокет уже закрыт и запись производит SocketTimeout.
Логика: у меня есть цепочка Rx с оператором repeat ().Поток читает пакет из сокета, что-то с ним делает и записывает ответ в сокет.Цепочка расположена на службе onStop (), но иногда ответ еще не был отправлен обратно перед удалением.Это приводит к сбою моего приложения, потому что исключение не было обработано правильно.
Таким образом, есть два случая: 1. В цепочке ничего не делается, когда служба останавливается и цепочка может быть немедленно удалена.2. Сеть работает по запросу.Тем временем служба была остановлена, сокет был закрыт, но я хочу дождаться результата и затем избавиться от цепочки.
Вот мой код:
mainLoopDisposable = Single.fromCallable { readStream(packet, socketInput) }
.map(::makeIpPacket)
.flatMap(doSomethingWithPacekt())
.doOnSuccess { socketOutput.write(it.rawPacket) }
.ignoreElement()
.retry(::retry)
.repeat()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({}, ::handleError)
Спасибо за любые предложения!