所以首先我會告訴你我有什麼,我想那裏發生:運行doOnNex在某些線程JA BehaviorSubject
我有一個BehavourSubject<DataObject>
:
private BehaviorSubject<DataObject> dataSubject = BehaviorSubject.create();
我還給在一定功能如下:
public Observable<DataObject> pendingData() {
return this.dataSubject.asObservable()
.doOnNext(data -> {
// do something with this data that has to be thread save.
})
.observeOn(AndroidSchedulers.mainThread());
}
我認爲發生的是,該doOnNext部分將在同一個線程中運行,在this.dataSubject.onNext(data);
被調用。但是,因爲我做了一些必須保存在這個lambda中的線程,所以我應該把它放到信號量中,或者在某個線程中運行所有的動作。
我的第一個想法是「在rx中處理線程的正常方法」,但我不知道它的工作原理。 我認爲一個subscribeOn(certainBackgroundScheduler)
添加到可觀察到的是這樣的:
public Observable<DataObject> pendingData() {
return this.dataSubject.asObservable()
.doOnNext(data -> {
// do something with this data that has to be thread save.
})
.subscribeOn(certainBackgroundScheduler)
.observeOn(AndroidSchedulers.mainThread());
}
但是,當我創建一個可觀察與認購塊,那麼這個塊在backgroundScheduler
運行。當我在訂戶上呼叫onNext
時,我在該線程中調用它是合乎邏輯的,但它在BehaviorSubject中是否一樣?
真的那麼簡單嗎?如果不是,我該如何強制主題在我的特定線程中運行doOnNext
塊?
而當你嘗試它時,它不起作用嗎? – weston