reactor-core/src/main/java/reactor/core/publisher/Flux.java
public static <T> Flux<T> create(Consumer<? super FluxSink<T>> emitter) {
	    return create(emitter, OverflowStrategy.BUFFER);
    }
public static <T> Flux<T> create(Consumer<? super FluxSink<T>> emitter) {
	    return create(emitter, OverflowStrategy.BUFFER);
    }
Programmatically create a {@link Flux} with the capability of emitting multiple
elements in a synchronous or asynchronous manner through the {@link FluxSink} API.
This includes emitting elements from multiple threads.
<p>
<img class="marble" src="doc-files/marbles/createForFlux.svg" alt="">
<p>
This Flux factory is useful if one wants to adapt some other multi-valued async API
and not worry about cancellation and backpressure (which is handled by buffering
all signals if the downstream can't keep up).
<p>
For example:

<pre><code>
Flux.&lt;String&gt;create(emitter -&gt; {

ActionListener al = e -&gt; {
emitter.next(textField.getText());
};
// without cleanup support:

button.addActionListener(al);

// with cleanup support:

button.addActionListener(al);
emitter.onDispose(() -> {
button.removeListener(al);
});
});
</code></pre>

@reactor.discard The {@link FluxSink} exposed by this operator buffers in case of
overflow. The buffer is discarded when the main sequence is cancelled.

@param <T> The type of values in the sequence
@param emitter Consume the {@link FluxSink} provided per-subscriber by Reactor to generate signals.
@return a {@link Flux}
@see #push(Consumer)