reactor-core/src/main/java/reactor/core/publisher/Mono.java
public final Mono<T> timeout(Duration timeout, @Nullable Mono<? extends T> fallback,
			Scheduler timer) {
		final Mono<Long> _timer = Mono.delay(timeout, timer).onErrorReturn(0L);

		if(fallback == null) {
			return onAssembly(new MonoTimeout<>(this, _timer, timeout.toMillis() + "ms"));
		}
		return onAssembly(new MonoTimeout<>(this, _timer, fallback));
	}
public final Mono<T> timeout(Duration timeout, @Nullable Mono<? extends T> fallback,
			Scheduler timer) {
		final Mono<Long> _timer = Mono.delay(timeout, timer).onErrorReturn(0L);

		if(fallback == null) {
			return onAssembly(new MonoTimeout<>(this, _timer, timeout.toMillis() + "ms"));
		}
		return onAssembly(new MonoTimeout<>(this, _timer, fallback));
	}
Switch to a fallback {@link Mono} in case an item doesn't arrive before the given period,
as measured on the provided {@link Scheduler}.

<p> If the given {@link Mono} is null, signal a {@link TimeoutException}.

<p>
<img class="marble" src="doc-files/marbles/timeoutFallbackForMono.svg" alt="">

@param timeout the timeout before the onNext signal from this {@link Mono}
@param fallback the fallback {@link Mono} to subscribe when a timeout occurs
@param timer a time-capable {@link Scheduler} instance to run on

@return an expirable {@link Mono} with a fallback {@link Mono}