Rx java RxJava-在map和doOnSuccess中执行长时间运行的任务有任何问题吗
考虑以下几点Rx java RxJava-在map和doOnSuccess中执行长时间运行的任务有任何问题吗,rx-java,reactive-programming,rx-java2,Rx Java,Reactive Programming,Rx Java2,考虑以下几点 类虚拟{ 私人娱乐第一步():单人{ 返回单身。只是(“大佛”) .subscribeOn(Schedulers.io()) } 乐趣行动1(){ 第一步() .地图{ 地图素材(it) } 杜恩先生{ println(${Thread.currentThread().name}it) } 杜恩塞斯先生{ 行动(it) } .flatMap{ return@flatMap另一步(it) } .observeOn(Schedulers.trampoline()) .subscribe
类虚拟{
私人娱乐第一步():单人{
返回单身。只是(“大佛”)
.subscribeOn(Schedulers.io())
}
乐趣行动1(){
第一步()
.地图{
地图素材(it)
}
杜恩先生{
println(${Thread.currentThread().name}it)
}
杜恩塞斯先生{
行动(it)
}
.flatMap{
return@flatMap另一步(it)
}
.observeOn(Schedulers.trampoline())
.subscribe({result->
println(结果)
}, {
it.printStackTrace()
})
}
私人趣味地图素材(it:String):Int{
println(“线程${thread.currentThread().name}上的mapStuff”)
线程睡眠(2000L)
把它还给我
}
私人娱乐活动(i:Int){
println(“线程${thread.currentThread().name}上的someVoidAction”)
线程睡眠(2000L)
}
}
我能看到的唯一缺点是:
Schedulers.computation()
而不是Schedulers.io()
。然而,在实践中,Schedulers.io()
在我的项目中99%的时间都在使用。那么,我们需要关心吗fun action2(){
第一步()
.平面图{
地图(it)
}
.平面图{
return@flatMapDostuff反应性(it)
}
.平面图{
return@flatMap另一步(it)
}
.observeOn(Schedulers.trampoline())
.subscribe({result->
println(结果)
}, {
it.printStackTrace()
})
}
私人娱乐场所(i:Int):单人{
返回Completable.fromAction{
println(“someVoidAction$i”)
}
.delay(2L,TimeUnit.SECONDS,Schedulers.io())
.第三(单身。只是(我))
}
私人娱乐地图(it:字符串):单人{
返回单曲。仅(它的长度)
.delay(2L,TimeUnit.SECONDS,Schedulers.io())
}
遵循以下步骤,您不应将导致副作用的代码放入映射图中
。您应该始终使副作用代码显式
引起副作用的代码只应在创建可观察的、订阅的或很少在do
操作符中出现。这将使任何阅读代码的人都清楚地了解正在发生的事情,并且也将使我们更容易地了解链的哪一部分是可测试的,或者不可测试的
do
操作符中的副作用是正常的,事实上它们是预期的,但是请确保您了解,这些副作用将在每次订阅可观察对象时发生。依我看,如果你能把代码放在订阅中,那就这样做。你放在地图中的这些“长时间运行的任务”。。。它们是否包含副作用(涉及IO、DB或服务器)或只是计算密集型?是的,它们通常都有