reactor-core/src/main/java/reactor/core/publisher/Mono.java
public static <T, D> Mono<T> using(Callable<? extends D> resourceSupplier,
			Function<? super D, ? extends Mono<? extends T>> sourceSupplier,
			Consumer<? super D> resourceCleanup) {
		return using(resourceSupplier, sourceSupplier, resourceCleanup, true);
	}
public static <T, D> Mono<T> using(Callable<? extends D> resourceSupplier,
			Function<? super D, ? extends Mono<? extends T>> sourceSupplier,
			Consumer<? super D> resourceCleanup) {
		return using(resourceSupplier, sourceSupplier, resourceCleanup, true);
	}
Uses a resource, generated by a supplier for each individual Subscriber, while streaming the value from a
Mono derived from the same resource and makes sure the resource is released if the
sequence terminates or the Subscriber cancels.
<p>
Eager resource cleanup happens just before the source termination and exceptions raised by the cleanup Consumer
may override the terminal event.
<p>
<img class="marble" src="doc-files/marbles/usingForMono.svg" alt="">

@param resourceSupplier a {@link Callable} that is called on subscribe to create the resource
@param sourceSupplier a {@link Mono} factory to create the Mono depending on the created resource
@param resourceCleanup invoked on completion to clean-up the resource
@param <T> emitted type
@param <D> resource type

@return new {@link Mono}