The short answer is that Rx does not introduce concurrency unless you instruct it through SubscribeOn, ObserveOn, or some kind of conversion operator like Buffer.
Thus, any code in the "Subscribe" section of the Rx operator will run in the same thread that you named. Subscribe (onNext, etc.). However, the actual onNext, onError, and onComplete callbacks will be executed on any thread that the observer uses, you have no control over this (unless you wrote a statement).
To ensure that calls are received in the user interface thread, you must add .ObserveOn (UIDispatcherThread). This ensures that the thread you are invoked on again and make it verifiable.
Hope this helps.
source share