code: 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));
  	}
docs: 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}