Top Description Fields Constructors Methods
reactor.core.publisher

pack-priv final Class SinkManyUnicast<T>

extends Flux<T>
implements InternalManySink<T>, Disposable, Fuseable.QueueSubscription<T>, Fuseable
Class Inheritance
All Implemented Interfaces
reactor.core.Fuseable, reactor.core.Fuseable.QueueSubscription, org.reactivestreams.Subscription, java.util.Queue, java.util.Collection, java.lang.Iterable, reactor.core.Disposable, reactor.core.publisher.InternalManySink, reactor.core.publisher.ContextHolder, reactor.core.publisher.Sinks.Many, reactor.core.Scannable
Type Parameters
<T>
the input and output type
Imports
java.util.Objects, .Queue, java.util.concurrent.CancellationException, java.util.concurrent.atomic.AtomicIntegerFieldUpdater, .AtomicLongFieldUpdater, .AtomicReferenceFieldUpdater, java.util.stream.Stream, reactor.core.CoreSubscriber, .Disposable, .Fuseable, .Scannable, reactor.core.publisher.Sinks.EmitResult, reactor.util.annotation.Nullable, reactor.util.concurrent.Queues, reactor.util.context.Context

A Sinks.Many implementation that takes a custom queue and allows only a single subscriber. SinkManyUnicast allows multiplexing of the events which means that it supports multiple producers and only one consumer. However, it should be noticed that multi-producer case is only valid if appropriate Queue is provided. Otherwise, it could break Reactive Streams Spec if Publishers publish on different threads.



Note

SinkManyUnicast does not respect the actual subscriber's demand as it is described in Reactive Streams Spec. However, SinkManyUnicast embraces configurable Queue internally which allows enabling backpressure support and preventing of consumer's overwhelming. Hence, interaction model between producers and SinkManyUnicast will be PUSH only. In opposite, interaction model between SinkManyUnicast and consumer will be PUSH-PULL as defined in Reactive Streams Spec. In the case when upstream's signals overflow the bound of internal Queue, SinkManyUnicast will fail with signaling onError( reactor.core.Exceptions.OverflowException).



Note

The implementation keeps the order of signals. That means that in case of terminal signal (completion or error signals) it will be postponed until all of the previous signals has been consumed.

Field Summary

Modifier and TypeField and Description
pack-priv volatile CoreSubscriber<? super T>
pack-priv volatile boolean
pack-priv static final AtomicIntegerFieldUpdater<SinkManyUnicast<T>>
pack-priv volatile int
pack-priv volatile boolean
pack-priv Throwable
pack-priv boolean
pack-priv static final AtomicReferenceFieldUpdater<SinkManyUnicast<T>, Disposable>
pack-priv volatile int
pack-priv static final AtomicIntegerFieldUpdater<SinkManyUnicast<T>>
pack-priv volatile Disposable
pack-priv boolean
pack-priv final Queue<T>
pack-priv volatile long
pack-priv static final AtomicLongFieldUpdater<SinkManyUnicast<T>>
pack-priv volatile int
pack-priv static final AtomicIntegerFieldUpdater<SinkManyUnicast<T>>
Inherited from reactor.core.publisher.Flux:
ALWAYS_BOOLEAN_SUPPLIERIDENTITY_FUNCTIONLIST_SUPPLIEROBJECT_EQUALSET_SUPPLIERTUPLE2_BIFUNCTION

Constructor Summary

AccessConstructor and Description
pack-priv
pack-priv
SinkManyUnicast(Queue<T> queue, Disposable onTerminate)

Method Summary

Modifier and TypeMethod and Description
public Flux<T>
asFlux()

Implements reactor.core.publisher.Sinks.Many.asFlux.

Return a Flux view of this sink.
public void
cancel()

Implements org.reactivestreams.Subscription.cancel.

Request the Publisher to stop sending data and clean up resources.
pack-priv boolean
checkTerminated(boolean d, boolean empty, CoreSubscriber<? super T> a, Queue<T> q, T t)

public void
clear()

Implements java.util.Collection.clear.

Removes all of the elements from this collection (optional operation).
pack-priv static <
the relayed type
E
>
SinkManyUnicast<E>

Returns:

a unicast Sinks.Many
create
()

Create a new SinkManyUnicast that will buffer on an internal queue in an unbounded fashion.

pack-priv static <
the relayed type
E
>
SinkManyUnicast<E>

Returns:

a unicast Sinks.Many
create
(Queue<E>
the buffering queue
queue
)

Create a new SinkManyUnicast that will buffer on a provided queue in an unbounded fashion.

pack-priv static <
the relayed type
E
>
SinkManyUnicast<E>

Returns:

a unicast Sinks.Many
create
(Queue<E>
the buffering queue
queue
,
Disposable
called on any terminal signal
endcallback
)

Create a new SinkManyUnicast that will buffer on a provided queue in an unbounded fashion.

public Context
currentContext()

Implements reactor.core.publisher.ContextHolder.currentContext.

Request a Context from dependent components which can include downstream operators during subscribing or a terminal org.reactivestreams.Subscriber.
public int
currentSubscriberCount()

Implements reactor.core.publisher.Sinks.Many.currentSubscriberCount.

Get how many Subscribers are currently subscribed to the sink.
public void
dispose()

Implements reactor.core.Disposable.dispose.

Cancel or dispose the underlying task or resource.
pack-priv void
pack-priv void
drain(T dataSignalOfferedBeforeDrain)

pack-priv void
drainFused(CoreSubscriber<? super T> a)

pack-priv void
public int
getPrefetch()

Overrides reactor.core.publisher.Flux.getPrefetch.

The prefetch configuration of the Flux
public Stream<Scannable>
inners()

Overrides default reactor.core.Scannable.inners.

Return a Stream of referenced inners (flatmap, multicast etc)
public boolean
isDisposed()

Overrides default reactor.core.Disposable.isDisposed.

Optionally return true when the resource or task is disposed.
public boolean
isEmpty()

Implements java.util.Collection.isEmpty.

Returns true if this collection contains no elements.
public T
poll()

Implements java.util.Queue.poll.

Retrieves and removes the head of this queue, or returns null if this queue is empty.
public void
request(long
the strictly positive number of elements to requests to the upstream Publisher
n
)

Implements org.reactivestreams.Subscription.request.

No events will be sent by a Publisher until demand is signaled via this method.
public int
requestFusion(int
the mode requested by the intermediate operator
requestedMode
)

Implements reactor.core.Fuseable.QueueSubscription.requestFusion.

Request a specific fusion mode from this QueueSubscription.
public Object
scanUnsafe(Scannable.Attr<T>
a Attr to resolve for the component.
key
)

Implements reactor.core.Scannable.scanUnsafe.

This method is used internally by components to define their key-value mappings in a single place.
public int
size()

Implements java.util.Collection.size.

Returns the number of elements in this collection.
public void
subscribe(CoreSubscriber<? super T>
the Subscriber interested into the published sequence
actual
)

Implements abstract reactor.core.publisher.Flux.subscribe.

Implements reactor.core.CorePublisher.subscribe.

An internal Publisher#subscribe(Subscriber) that will bypass Hooks#onLastOperator(Function) pointcut.
public Sinks.EmitResult
tryEmitComplete()

Implements reactor.core.publisher.Sinks.Many.tryEmitComplete.

Try to terminate the sequence successfully, generating an onComplete signal.
public Sinks.EmitResult
tryEmitError(Throwable
the exception to signal, not null
t
)

Implements reactor.core.publisher.Sinks.Many.tryEmitError.

Try to fail the sequence, generating an onError signal.
public Sinks.EmitResult
tryEmitNext(T
the value to emit, not null
t
)

Implements reactor.core.publisher.Sinks.Many.tryEmitNext.

Try emitting a non-null element, generating an onNext signal.
Inherited from reactor.core.publisher.Flux:
allanyasblockFirstblockFirstblockLastblockLastbufferbufferbufferbufferbufferbufferbufferbufferbufferbufferbufferbufferTimeoutbufferTimeoutbufferTimeoutbufferTimeoutbufferTimeoutbufferTimeoutbufferTimeoutbufferTimeoutbufferUntilbufferUntilbufferUntilChangedbufferUntilChangedbufferUntilChangedbufferWhenbufferWhenbufferWhilecachecachecachecachecachecachecancelOncastcheckpointcheckpointcheckpointcollectcollectcollectListcollectMapcollectMapcollectMapcollectMultimapcollectMultimapcollectMultimapcollectSortedListcollectSortedListcombineLatestcombineLatestcombineLatestcombineLatestcombineLatestcombineLatestcombineLatestcombineLatestcombineLatestconcatconcatconcatconcatconcatDelayErrorconcatDelayErrorconcatDelayErrorconcatDelayErrorconcatMapconcatMapconcatMapDelayErrorconcatMapDelayErrorconcatMapDelayErrorconcatMapIterableconcatMapIterableconcatWithconcatWithValuescontextCapturecontextWritecontextWritecountcountingBooleanSuppliercountingPredicatecreatecreatedefaultIfEmptydeferdeferContextualdelayElementsdelayElementsdelaySequencedelaySequencedelaySubscriptiondelaySubscriptiondelaySubscriptiondelayUntildematerializedistinctdistinctdistinctdistinctdistinctUntilChangeddistinctUntilChangeddistinctUntilChangeddoAfterTerminatedoFinallydoFirstdoOnCanceldoOnCompletedoOnDiscarddoOnEachdoOnErrordoOnErrordoOnErrordoOnNextdoOnRequestdoOnSignaldoOnSubscribedoOnTerminateelapsedelapsedelementAtelementAtemptyequalPredicateerrorerrorerrorexpandexpandexpandDeepexpandDeepfilterfilterWhenfilterWhenfirstfirstfirstWithSignalfirstWithSignalfirstWithValuefirstWithValueflatMapflatMapflatMapflatMapflatMapflatMapDelayErrorflatMapIterableflatMapIterableflatMapSequentialflatMapSequentialflatMapSequentialflatMapSequentialflatMapSequentialDelayErrorfromfromArrayfromIterablefromStreamfromStreamgenerategenerategenerategroupBygroupBygroupBygroupBygroupJoinhandlehasElementhasElementshashSetSupplierhideidentityFunctionignoreElementsindexindexintervalintervalintervalintervaljoinjustjustlastlastlimitRatelimitRatelimitRequestlistSupplierloglogloglogloglogmapmapNotNullmaterializemergemergemergemergemergemergemergemergeComparingmergeComparingmergeComparingmergeComparingDelayErrormergeComparingWithmergeDelayErrormergeOrderedmergeOrderedmergeOrderedmergeOrderedWithmergePrioritymergePrioritymergePrioritymergePriorityDelayErrormergeSequentialmergeSequentialmergeSequentialmergeSequentialmergeSequentialmergeSequentialmergeSequentialmergeSequentialmergeSequentialmergeSequentialDelayErrormergeSequentialDelayErrormergeSequentialDelayErrormergeWithmetricsnamenevernextofTypeonAssemblyonAssemblyonBackpressureBufferonBackpressureBufferonBackpressureBufferonBackpressureBufferonBackpressureBufferonBackpressureBufferonBackpressureBufferonBackpressureDroponBackpressureDroponBackpressureErroronBackpressureLatestonErrorCompleteonErrorCompleteonErrorCompleteonErrorContinueonErrorContinueonErrorContinueonErrorMaponErrorMaponErrorMaponErrorResumeonErrorResumeonErrorResumeonErrorReturnonErrorReturnonErrorReturnonErrorStoponTerminateDetachorparallelparallelparallelpublishpublishpublishpublishpublishNextpublishOnpublishOnpublishOnpublishOnpushpushrangereducereducereduceWithrepeatrepeatrepeatrepeatrepeatWhenreplayreplayreplayreplayreplayreplayretryretryretryWhensamplesamplesampleFirstsampleFirstsampleTimeoutsampleTimeoutscanscanscanWithshareshareNextsinglesinglesingleOrEmptyskipskipskipskipLastskipUntilskipUntilOtherskipWhilesortsortstartWithstartWithstartWithsubscribesubscribesubscribesubscribesubscribesubscribesubscribesubscribeOnsubscribeOnsubscribeWithswitchIfEmptyswitchMapswitchMapswitchOnFirstswitchOnFirstswitchOnNextswitchOnNexttagtaketaketaketaketakeLasttakeUntiltakeUntilOthertakeWhiletaptaptapthenthenthenEmptythenManytimedtimedtimeouttimeouttimeouttimeouttimeouttimeouttimeouttimestamptimestamptoIterabletoIterabletoIterabletoStreamtoStreamtoStringtransformtransformDeferredtransformDeferredContextualtuple2FunctionusingusingusingWhenusingWhenwindowwindowwindowwindowwindowwindowwindowwindowTimeoutwindowTimeoutwindowTimeoutwindowTimeoutwindowUntilwindowUntilwindowUntilwindowUntilChangedwindowUntilChangedwindowUntilChangedwindowWhenwindowWhilewindowWhilewithLatestFromwrapwrapToMonozipzipzipzipzipzipzipzipzipzipzipzipzipzipWithzipWithzipWithzipWithzipWithIterablezipWithIterable

Field Detail

actualback to summary
pack-priv volatile CoreSubscriber<? super T> actual
cancelledback to summary
pack-priv volatile boolean cancelled
DISCARD_GUARDback to summary
pack-priv static final AtomicIntegerFieldUpdater<SinkManyUnicast<T>> DISCARD_GUARD
Annotations
@SuppressWarnings:rawtypes
discardGuardback to summary
pack-priv volatile int discardGuard
doneback to summary
pack-priv volatile boolean done
errorback to summary
pack-priv Throwable error
hasDownstreamback to summary
pack-priv boolean hasDownstream
ON_TERMINATEback to summary
pack-priv static final AtomicReferenceFieldUpdater<SinkManyUnicast<T>, Disposable> ON_TERMINATE
Annotations
@SuppressWarnings:rawtypes
onceback to summary
pack-priv volatile int once
ONCEback to summary
pack-priv static final AtomicIntegerFieldUpdater<SinkManyUnicast<T>> ONCE
Annotations
@SuppressWarnings:rawtypes
onTerminateback to summary
pack-priv volatile Disposable onTerminate
outputFusedback to summary
pack-priv boolean outputFused
queueback to summary
pack-priv final Queue<T> queue
requestedback to summary
pack-priv volatile long requested
REQUESTEDback to summary
pack-priv static final AtomicLongFieldUpdater<SinkManyUnicast<T>> REQUESTED
Annotations
@SuppressWarnings:rawtypes
wipback to summary
pack-priv volatile int wip
WIPback to summary
pack-priv static final AtomicIntegerFieldUpdater<SinkManyUnicast<T>> WIP
Annotations
@SuppressWarnings:rawtypes

Constructor Detail

SinkManyUnicastback to summary
pack-priv SinkManyUnicast(Queue<T> queue)
SinkManyUnicastback to summary
pack-priv SinkManyUnicast(Queue<T> queue, Disposable onTerminate)

Method Detail

asFluxback to summary
public Flux<T> asFlux()

Implements reactor.core.publisher.Sinks.Many.asFlux.

Doc from reactor.core.publisher.Sinks.Many.asFlux.

Return a Flux view of this sink. Every call returns the same instance.

Returns:Flux<T>

the Flux view associated to this Sinks.Many

Annotations
@Override
cancelback to summary
public void cancel()

Implements org.reactivestreams.Subscription.cancel.

Doc from org.reactivestreams.Subscription.cancel.

Request the Publisher to stop sending data and clean up resources.

Data may still be sent to meet previously signalled demand after calling cancel.

Annotations
@Override
checkTerminatedback to summary
pack-priv boolean checkTerminated(boolean d, boolean empty, CoreSubscriber<? super T> a, Queue<T> q, T t)
clearback to summary
public void clear()

Implements java.util.Collection.clear.

Doc from java.util.Collection.clear.

Removes all of the elements from this collection (optional operation). The collection will be empty after this method returns.

Annotations
@Override
createback to summary
pack-priv static <E> SinkManyUnicast<E> create()

Create a new SinkManyUnicast that will buffer on an internal queue in an unbounded fashion.

Parameters
<E>
the relayed type
Returns:SinkManyUnicast<E>

a unicast Sinks.Many

createback to summary
pack-priv static <E> SinkManyUnicast<E> create(Queue<E> queue)

Create a new SinkManyUnicast that will buffer on a provided queue in an unbounded fashion.

Parameters
<E>
the relayed type
queue:Queue<E>

the buffering queue

Returns:SinkManyUnicast<E>

a unicast Sinks.Many

createback to summary
pack-priv static <E> SinkManyUnicast<E> create(Queue<E> queue, Disposable endcallback)

Create a new SinkManyUnicast that will buffer on a provided queue in an unbounded fashion.

Parameters
<E>
the relayed type
queue:Queue<E>

the buffering queue

endcallback:Disposable

called on any terminal signal

Returns:SinkManyUnicast<E>

a unicast Sinks.Many

currentContextback to summary
public Context currentContext()

Implements reactor.core.publisher.ContextHolder.currentContext.

Doc from reactor.core.publisher.ContextHolder.currentContext.

Request a Context from dependent components which can include downstream operators during subscribing or a terminal org.reactivestreams.Subscriber.

Returns:Context

a resolved context

Annotations
@Override
currentSubscriberCountback to summary
public int currentSubscriberCount()

Implements reactor.core.publisher.Sinks.Many.currentSubscriberCount.

Doc from reactor.core.publisher.Sinks.Many.currentSubscriberCount.

Get how many Subscribers are currently subscribed to the sink.

This is a best effort peek at the sink state, and a subsequent attempt at emitting to the sink might still return EmitResult#FAIL_ZERO_SUBSCRIBER where relevant. (generally in tryEmitNext(Object)). Request (and lack thereof) isn't taken into account, all registered subscribers are counted.

Returns:int

the number of subscribers at the time of invocation

Annotations
@Override
disposeback to summary
public void dispose()

Implements reactor.core.Disposable.dispose.

Doc from reactor.core.Disposable.dispose.

Cancel or dispose the underlying task or resource.

Implementations are required to make this method idempotent.

Annotations
@Override
doTerminateback to summary
pack-priv void doTerminate()
drainback to summary
pack-priv void drain(T dataSignalOfferedBeforeDrain)
drainFusedback to summary
pack-priv void drainFused(CoreSubscriber<? super T> a)
drainRegularback to summary
pack-priv void drainRegular(CoreSubscriber<? super T> a)
getPrefetchback to summary
public int getPrefetch()

Overrides reactor.core.publisher.Flux.getPrefetch.

Doc from reactor.core.publisher.Flux.getPrefetch.

The prefetch configuration of the Flux

Returns:int

the prefetch configuration of the Flux, -1 if unspecified

Annotations
@Override
innersback to summary
public Stream<Scannable> inners()

Overrides default reactor.core.Scannable.inners.

Doc from reactor.core.Scannable.inners.

Return a Stream of referenced inners (flatmap, multicast etc)

Returns:Stream<Scannable>

a Stream of referenced inners (flatmap, multicast etc)

Annotations
@Override
isDisposedback to summary
public boolean isDisposed()

Overrides default reactor.core.Disposable.isDisposed.

Doc from reactor.core.Disposable.isDisposed.

Optionally return true when the resource or task is disposed.

Implementations are not required to track disposition and as such may never return true even when disposed. However, they MUST only return true when there's a guarantee the resource or task is disposed.

Returns:boolean

true when there's a guarantee the resource or task is disposed.

Annotations
@Override
isEmptyback to summary
public boolean isEmpty()

Implements java.util.Collection.isEmpty.

Doc from java.util.Collection.isEmpty.

Returns true if this collection contains no elements.

Returns:boolean

true if this collection contains no elements

Annotations
@Override
pollback to summary
public T poll()

Implements java.util.Queue.poll.

Doc from java.util.Queue.poll.

Retrieves and removes the head of this queue, or returns null if this queue is empty.

Returns:T

the head of this queue, or null if this queue is empty

Annotations
@Override
@Nullable
requestback to summary
public void request(long n)

Implements org.reactivestreams.Subscription.request.

Doc from org.reactivestreams.Subscription.request.

No events will be sent by a Publisher until demand is signaled via this method.

It can be called however often and whenever needed—but if the outstanding cumulative demand ever becomes Long.MAX_VALUE or more, it may be treated by the Publisher as "effectively unbounded".

Whatever has been requested can be sent by the Publisher so only signal demand for what can be safely handled.

A Publisher can send less than is requested if the stream ends but then must emit either Subscriber#onError(Throwable) or Subscriber#onComplete().

Parameters
n:long

the strictly positive number of elements to requests to the upstream Publisher

Annotations
@Override
requestFusionback to summary
public int requestFusion(int requestedMode)

Implements reactor.core.Fuseable.QueueSubscription.requestFusion.

Doc from reactor.core.Fuseable.QueueSubscription.requestFusion.

Request a specific fusion mode from this QueueSubscription.

One should request either SYNC, ASYNC or ANY modes (never NONE) and the implementor should return NONE, SYNC or ASYNC (never ANY).

For example, if a source supports only ASYNC fusion but the intermediate operator supports only SYNC fuseable sources, the operator may request SYNC fusion and the source can reject it via NONE, thus the operator can return NONE as well to downstream and the fusion doesn't happen.

Parameters
requestedMode:int

the mode requested by the intermediate operator

Returns:int

the actual fusion mode activated

Annotations
@Override
scanUnsafeback to summary
public Object scanUnsafe(Scannable.Attr<T> key)

Implements reactor.core.Scannable.scanUnsafe.

Doc from reactor.core.Scannable.scanUnsafe.

This method is used internally by components to define their key-value mappings in a single place. Although it is ignoring the generic type of the Attr key, implementors should take care to return values of the correct type, and return null if no specific value is available.

For public consumption of attributes, prefer using scan(Attr), which will return a typed value and fall back to the key's default if the component didn't define any mapping.

Parameters
key:Scannable.Attr<T>

a Attr to resolve for the component.

Returns:Object

the value associated to the key for that specific component, or null if none.

Annotations
@Override
sizeback to summary
public int size()

Implements java.util.Collection.size.

Doc from java.util.Collection.size.

Returns the number of elements in this collection. If this collection contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

Returns:int

the number of elements in this collection

Annotations
@Override
subscribeback to summary
public void subscribe(CoreSubscriber<? super T> actual)

Implements abstract reactor.core.publisher.Flux.subscribe.

Implements reactor.core.CorePublisher.subscribe.

Doc from reactor.core.publisher.Flux.subscribe.

An internal Publisher#subscribe(Subscriber) that will bypass Hooks#onLastOperator(Function) pointcut.

In addition to behave as expected by Publisher#subscribe(Subscriber) in a controlled manner, it supports direct subscribe-time Context passing.

Parameters
actual:CoreSubscriber<? super T>

the Subscriber interested into the published sequence

Annotations
@Override
tryEmitCompleteback to summary
public Sinks.EmitResult tryEmitComplete()

Implements reactor.core.publisher.Sinks.Many.tryEmitComplete.

Doc from reactor.core.publisher.Sinks.Many.tryEmitComplete.

Try to terminate the sequence successfully, generating an onComplete signal. The result of the attempt is represented as an EmitResult, which possibly indicates error cases.

See the list of failure EmitResult in emitComplete(EmitFailureHandler) javadoc for an example of how each of these can be dealt with, to decide if the emit API would be a good enough fit instead.

Returns:Sinks.EmitResult

an EmitResult, which should be checked to distinguish different possible failures

Annotations
@Override
tryEmitErrorback to summary
public Sinks.EmitResult tryEmitError(Throwable t)

Implements reactor.core.publisher.Sinks.Many.tryEmitError.

Doc from reactor.core.publisher.Sinks.Many.tryEmitError.

Try to fail the sequence, generating an onError signal. The result of the attempt is represented as an EmitResult, which possibly indicates error cases.

See the list of failure EmitResult in emitError(Throwable, EmitFailureHandler) javadoc for an example of how each of these can be dealt with, to decide if the emit API would be a good enough fit instead.

Parameters
t:Throwable

the exception to signal, not null

Returns:Sinks.EmitResult

an EmitResult, which should be checked to distinguish different possible failures

Annotations
@Override
tryEmitNextback to summary
public Sinks.EmitResult tryEmitNext(T t)

Implements reactor.core.publisher.Sinks.Many.tryEmitNext.

Doc from reactor.core.publisher.Sinks.Many.tryEmitNext.

Try emitting a non-null element, generating an onNext signal. The result of the attempt is represented as an EmitResult, which possibly indicates error cases.

See the list of failure EmitResult in emitNext(Object, EmitFailureHandler) javadoc for an example of how each of these can be dealt with, to decide if the emit API would be a good enough fit instead.

Might throw an unchecked exception as a last resort (eg. in case of a fatal error downstream which cannot be propagated to any asynchronous handler, a bubbling exception, ...).

Parameters
t:T

the value to emit, not null

Returns:Sinks.EmitResult

an EmitResult, which should be checked to distinguish different possible failures

Annotations
@Override