reactor-core/src/main/java/reactor/core/publisher/Mono.java
public final Mono<T> publishOn(Scheduler scheduler) {
		if(this instanceof Callable) {
			if (this instanceof Fuseable.ScalarCallable) {
				try {
					T value = block();
					return onAssembly(new MonoSubscribeOnValue<>(value, scheduler));
				}
				catch (Throwable t) {
					//leave MonoSubscribeOnCallable defer error
				}
			}
			@SuppressWarnings("unchecked")
			Callable<T> c = (Callable<T>)this;
			return onAssembly(new MonoSubscribeOnCallable<>(c, scheduler));
		}
		return onAssembly(new MonoPublishOn<>(this, scheduler));
	}
public final Mono<T> publishOn(Scheduler scheduler) {
		if(this instanceof Callable) {
			if (this instanceof Fuseable.ScalarCallable) {
				try {
					T value = block();
					return onAssembly(new MonoSubscribeOnValue<>(value, scheduler));
				}
				catch (Throwable t) {
					//leave MonoSubscribeOnCallable defer error
				}
			}
			@SuppressWarnings("unchecked")
			Callable<T> c = (Callable<T>)this;
			return onAssembly(new MonoSubscribeOnCallable<>(c, scheduler));
		}
		return onAssembly(new MonoPublishOn<>(this, scheduler));
	}
Run onNext, onComplete and onError on a supplied {@link Scheduler}
{@link Worker Worker}.
<p>
This operator influences the threading context where the rest of the operators in
the chain below it will execute, up to a new occurrence of {@code publishOn}.
<p>
<img class="marble" src="doc-files/marbles/publishOnForMono.svg" alt="">
<p>
Typically used for fast publisher, slow consumer(s) scenarios.

<blockquote><pre>
{@code mono.publishOn(Schedulers.single()).subscribe() }
</pre></blockquote>

@param scheduler a {@link Scheduler} providing the {@link Worker} where to publish

@return an asynchronously producing {@link Mono}