我正在寻找使用 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)
感谢您的任何建议!