我正在寻找使用while(true)循环(也称为重复运算符)处理链的最佳方法。我遇到的问题是,有时当我处置链并且仍然在链中执行某些操作时(例如套接字写入),结果/异常将无法传递。最可能的异常是因为套接字已经关闭并且写入会产生SocketTimeout。
逻辑: 我有一个带有repeat()运算符的Rx链。流从套接字读取数据包,对其进行处理,然后将响应写回套接字。链被放置在服务onStop()上,但是在放置之前,响应尚未返回。这导致我的应用崩溃,因为异常处理不正确。
所以有两种情况: 1.停止服务时,链条什么也没做,链条可以立即处置。 2. Chain正在按要求工作。在此期间,服务已停止,套接字已关闭,但我要等待结果,而不要处理链。
这是我的代码的安宁:
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)
谢谢您的建议!