El suscriptor RxJava2 PublishSubject no puede recibir elementos cuando se le llama desde varios hilos usando SingleScheduler

Tengo la siguiente testing unitaria en la que bash enviar 10 String de diferentes hilos y probar que recibo esas String de un solo hilo. Mi problema es que esta testing flaps. A veces tiene éxito, pero a veces solo recibo 8 o 9 elementos y luego la testing se cuelga hasta que el time de espera se agota. ¿Estoy usando SingleScheduler de forma incorrecta? ¿Extrañé algo más?

 val consumerCallerThreadNames = mutableSetOf<String>() val messageCount = AtomicInteger(0) val latch = CountDownLatch(MESSAGE_COUNT) @Test fun someTest() { val msg = "foo" val subject = PublishSubject.create<String>() subject .observeOn(SingleScheduler()) .subscribe({ message -> consumerCallerThreadNames.add(Thread.currentThread().name) messageCount.incrementAndGet() latch.countDown() }, Throwable::printStackTrace) 1.rangeTo(MESSAGE_COUNT).forEach { Thread({ try { subject.onNext(msg) } catch (t: Throwable) { t.printStackTrace() } }).start() } latch.await(10, SECONDS) assertThat(consumerCallerThreadNames).hasSize(1) assertThat(messageCount.get()).isEqualTo(MESSAGE_COUNT) } companion object { val MESSAGE_COUNT = 10 } 

Si reescribo esto para usar un ExecutorService un solo hilo, la testing ya no flaps, entonces el problema es con Rx o mi falta de conocimiento sobre Rx.