2017-09-15 34 views
0

如果我做這樣的事情:如何保留rx調度程序而不將它作爲方法參數?

Observable.just(1) 
.flatMap(
    //inner chain 
    Observable.just(2) 
     .subscribeOn(Schedulers.newThread()) 
) 
.map(// we are in the inner chain thread! //) 
.subscribeOn(Schedulers.newThread()) 
.subscribe() 

然後內螺紋將「泄漏」到主觀察到鏈。 如何保留原始線程?

在此先感謝!

+0

你是什麼意思「泄漏」?你的意思是內存泄漏嗎?其他資源泄漏? –

回答

1

之前已指定相同的調度和flatMap

Scheduler scheduler = ... 

Observable.just(1) 
    .subscribeOn(scheduler) 
    .flatMap(v -> Observable.just(2).subscribeOn(newThread())) 
    .observeOn(scheduler) 
    .subscribe() 

如果之後要返回完全相同的線程,你可以指定一個單線程調度:

scheduler = Schedulers.from(Executors.newSingleThreadedExecutor()); 

使用不是真的爲公衆消費

scheduler = new SingleScheduler(); 

或採取任何標準的計劃和使用RxJava 2擴展項目的SharedScheduler

scheduler = new SharedScheduler(Schedulers.computation()); 
+0

是的,但問題是主鏈的subscribeOn()被subscribe()(例如在演示者)中調用,並且當您想要將新的調度程序應用到不同的模塊中的observable的新操作符時(不是主持人)本地方式保存主持人指定的調度程序,除非通過args傳遞,這是令人傷心的。 – blinker

+0

您的API必須重新設計以允許該調度程序的定製,或者將其留給消費者以通過subscribeOn進行定義。 – akarnokd

相關問題