In RxJava, there is a set of operators we have not covered yet, called blocking operators. Such an operator serves as an immediate proxy between the reactive world and the stateful one, blocking and waiting for results to be emitted, and then returns in a non-reactive way. Even if the reactive operations are working on different threads, the blocking operator stops the declaring thread and makes it wait for the result in a synchronized manner, much like blockingSubscribe().
A blocking operator is especially helpful in making the results of Observable or Flowable chain processing available for evaluation. However, you should avoid using it in production because it encourages anti-patterns and undermines the benefits of reactive programming. For testing, you still want to prefer TestObserver and TestSubscriber, which we will cover later. In this section, however...