3

我正在寻找使用 while(true) 循环又名重复运算符来处理链的最佳方法。我遇到的问题是,有时当我处理链并且某些事情仍然在链中完成(例如套接字写入)时,不会传递结果/异常。最有可能的异常是因为套接字已经关闭并且写入会产生 SocketTimeout。

逻辑:我有一个带有 repeat() 运算符的 Rx 链。Stream 从套接字读取数据包,对其进行处理并将响应写回套接字。链在服务 onStop() 上被处理,但有时响应在处理之前尚未发回。这使我的应用程序崩溃,因为没有正确处理异常。

所以有两种情况: 1. 服务停止时chain什么都不做,可以立即处理chain。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)

感谢您的任何建议!

4

0 回答 0