reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final <U, V> Flux<Flux<T>> windowWhen(Publisher<U> bucketOpening,
			final Function<? super U, ? extends Publisher<V>> closeSelector) {
		return onAssembly(new FluxWindowWhen<>(this,
				bucketOpening,
				closeSelector,
				Queues.unbounded(Queues.XS_BUFFER_SIZE)));
	}
public final <U, V> Flux<Flux<T>> windowWhen(Publisher<U> bucketOpening,
			final Function<? super U, ? extends Publisher<V>> closeSelector) {
		return onAssembly(new FluxWindowWhen<>(this,
				bucketOpening,
				closeSelector,
				Queues.unbounded(Queues.XS_BUFFER_SIZE)));
	}
Split this {@link Flux} sequence into potentially overlapping windows controlled by items of a
start {@link Publisher} and end {@link Publisher} derived from the start values.

<p>
When Open signal is strictly not overlapping Close signal : dropping windows
<p>
When Open signal is strictly more frequent than Close signal : overlapping windows
<p>
When Open signal is exactly coordinated with Close signal : exact windows
<p>
<img class="marble" src="doc-files/marbles/windowWhen.svg" alt="">

@reactor.discard This operator DOES NOT discard elements.

@param bucketOpening a {@link Publisher} that opens a new window when it emits any item
@param closeSelector a {@link Function} given an opening signal and returning a {@link Publisher} that
will close the window when emitting

@param <U> the type of the sequence opening windows
@param <V> the type of the sequence closing windows opened by the bucketOpening Publisher's elements

@return a {@link Flux} of {@link Flux} windows opened by signals from a first
{@link Publisher} and lasting until a selected second {@link Publisher} emits