, 2왜 RxJava2 doOnSubscribe가 혼란스러운 순서로 실행됩니까? 코드를 인쇄 한 다음
Observable.just(1)
.doOnSubscribe(d -> System.out.println(1))
.doOnSubscribe(d -> System.out.println(2))
.blockingSubscribe();
그리고이 인쇄 2, RxJava1에서 1
Observable.just(1)
.doOnSubscribe(d -> System.out.println(1))
.subscribeOn(Schedulers.newThread())
.doOnSubscribe(d -> System.out.println(2))
.blockingSubscribe();
, 두 개의 코드 인쇄 "2, 1"모두 하류가 상류에 가입하기 전에 doOnSubscribe
호출하기 때문에 .
RxJava2에서 구독은 업스트림에서 다운 스트림 (Observer.onSubscribe
)에서 발생하지만 구독 전에 여전히 doOnSubscribe
이 호출됩니다. 그래서 혼란스러운 질서가 생겼습니다.
Observable.just(1)
.doOnSubscribe(d -> System.out.println(1))
.doOnSubscribe(d -> System.out.println(2))
.subscribeOn(Schedulers.newThread())
.doOnSubscribe(d -> System.out.println(3))
.doOnSubscribe(d -> System.out.println(4))
.blockingSubscribe();
그것은 "3, 4, 1, 2"내 예상으로는 아니지만이 가장 예정되어 인쇄 :
심지어 나는 더 혼란 상황을 제공 할 수 있습니다.이것은 의도적으로 설계된 동작입니까? 그렇다면 이점은 무엇입니까? 시간이 초과되기 전에 고가의 준비를하고있다 비동기 소스를 생각 -
그래, 왜 그런지 알 겠어. 내 질문에 왜 RxJava2 RxJava1 doOnSubscribe 호출 하향식 가입 후 호출되지 않습니다. 더 합리적인 '4,3,2,1'을 얻을 수 있습니다. –
RxJava 1에는'onSubscribe'가 없었고'subscribe'가 호출되었을 때 실행 코드로 제한되었습니다. RxJava 2의 주요 목표는 v1의 아키텍처 및 논리적 실수를 수정하고 정식 버전 충돌이되는 것이므로 바이너리 호환되지 않는 방식으로 수행하십시오. – akarnokd
고맙습니다. 내가 원하는 건 디자인에 의한 것인지 아닌지 말야. 나는'doOnSubscribe'와 어쩌면 커스텀 연산자를 사용하여 구독 순서에 따라 액션을 수행하도록주의 할 것입니다. –