用repeat()运算符处理Rx链的最佳方法

时间:2018-12-19 13:47:51

标签: android sockets rx-java

我正在寻找使用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)

谢谢您的建议!

0 个答案:

没有答案