Class FailedAsyncFuture<T>
- java.lang.Object
-
- com.linkedin.alpini.base.concurrency.impl.AbstractAsyncFuture<T>
-
- com.linkedin.alpini.base.concurrency.impl.FailedAsyncFuture<T>
-
- All Implemented Interfaces:
AsyncFuture<T>,AsyncPromise<T>,java.util.concurrent.CompletionStage<T>,java.util.concurrent.Future<T>
- Direct Known Subclasses:
CancelledAsyncFuture
public class FailedAsyncFuture<T> extends AbstractAsyncFuture<T> implements AsyncPromise<T>
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.linkedin.alpini.base.concurrency.AsyncFuture
AsyncFuture.Status
-
-
Field Summary
-
Fields inherited from interface com.linkedin.alpini.base.concurrency.AsyncFuture
NULL_SUCCESS
-
-
Constructor Summary
Constructors Constructor Description FailedAsyncFuture(java.lang.Throwable throwable)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.concurrent.CompletionStage<java.lang.Void>acceptEither(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Consumer<? super T> action)java.util.concurrent.CompletionStage<java.lang.Void>acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Consumer<? super T> action)java.util.concurrent.CompletionStage<java.lang.Void>acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Consumer<? super T> action, java.util.concurrent.Executor executor)AsyncPromise<T>addListener(AsyncFutureListener<T> listener)Adds the specified listener to this future.AsyncPromise<T>addListener(AsyncPromise<T> listener)Adds the specified future as a listener to this future.<U> java.util.concurrent.CompletionStage<U>applyToEither(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Function<? super T,U> fn)<U> java.util.concurrent.CompletionStage<U>applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Function<? super T,U> fn)<U> java.util.concurrent.CompletionStage<U>applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Function<? super T,U> fn, java.util.concurrent.Executor executor)AsyncFuture<T>await()Waits for this future to be completed.booleanawait(long timeout, java.util.concurrent.TimeUnit unit)Waits for this future to be completed within the specified time limit.AsyncFuture<T>awaitUninterruptibly()Waits for this future to be completed without interruption.booleanawaitUninterruptibly(long timeout, java.util.concurrent.TimeUnit unit)Waits for this future to be completed within the specified time limit without interruption.booleancancel(boolean mayInterruptIfRunning)Attempts to cancel execution of this task.Tget()Waits if necessary for the computation to complete, and then retrieves its result.Tget(long timeout, java.util.concurrent.TimeUnit unit)Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available.java.lang.ThrowablegetCause()Returns the cause of the failed I/O operation if the I/O operation has failed.TgetNow()Non-blocking variant ofFuture.get()booleanisCancelled()Returnstrueif this task was cancelled before it completed normally.booleanisDone()Returnstrueif this task completed.booleanisSuccess()Returnstrueif and only if the I/O operation was completed successfully.java.util.concurrent.CompletionStage<java.lang.Void>runAfterBoth(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)java.util.concurrent.CompletionStage<java.lang.Void>runAfterBothAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)java.util.concurrent.CompletionStage<java.lang.Void>runAfterBothAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action, java.util.concurrent.Executor executor)java.util.concurrent.CompletionStage<java.lang.Void>runAfterEither(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)java.util.concurrent.CompletionStage<java.lang.Void>runAfterEitherAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)java.util.concurrent.CompletionStage<java.lang.Void>runAfterEitherAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action, java.util.concurrent.Executor executor)booleansetFailure(java.lang.Throwable cause)Marks this future as a failure and notifies all listeners.booleansetSuccess(T result)Marks this future as a success and notifies all listeners.java.util.concurrent.CompletionStage<java.lang.Void>thenAccept(java.util.function.Consumer<? super T> action)java.util.concurrent.CompletionStage<java.lang.Void>thenAcceptAsync(java.util.function.Consumer<? super T> action)java.util.concurrent.CompletionStage<java.lang.Void>thenAcceptAsync(java.util.function.Consumer<? super T> action, java.util.concurrent.Executor executor)<U> java.util.concurrent.CompletionStage<java.lang.Void>thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiConsumer<? super T,? super U> action)<U> java.util.concurrent.CompletionStage<java.lang.Void>thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiConsumer<? super T,? super U> action)<U> java.util.concurrent.CompletionStage<java.lang.Void>thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiConsumer<? super T,? super U> action, java.util.concurrent.Executor executor)<U> java.util.concurrent.CompletionStage<U>thenApply(java.util.function.Function<? super T,? extends U> fn)<U> java.util.concurrent.CompletionStage<U>thenApplyAsync(java.util.function.Function<? super T,? extends U> fn)<U> java.util.concurrent.CompletionStage<U>thenApplyAsync(java.util.function.Function<? super T,? extends U> fn, java.util.concurrent.Executor executor)<U,V>
java.util.concurrent.CompletionStage<V>thenCombine(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiFunction<? super T,? super U,? extends V> fn)<U,V>
java.util.concurrent.CompletionStage<V>thenCombineAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiFunction<? super T,? super U,? extends V> fn)<U,V>
java.util.concurrent.CompletionStage<V>thenCombineAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiFunction<? super T,? super U,? extends V> fn, java.util.concurrent.Executor executor)<U> java.util.concurrent.CompletionStage<U>thenCompose(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>> fn)<U> java.util.concurrent.CompletionStage<U>thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>> fn)<U> java.util.concurrent.CompletionStage<U>thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>> fn, java.util.concurrent.Executor executor)java.util.concurrent.CompletionStage<java.lang.Void>thenRun(java.lang.Runnable action)java.util.concurrent.CompletionStage<java.lang.Void>thenRunAsync(java.lang.Runnable action)java.util.concurrent.CompletionStage<java.lang.Void>thenRunAsync(java.lang.Runnable action, java.util.concurrent.Executor executor)java.util.concurrent.CompletableFuture<T>toCompletableFuture()-
Methods inherited from class com.linkedin.alpini.base.concurrency.impl.AbstractAsyncFuture
exceptionally, handle, handleAsync, handleAsync, whenComplete, whenCompleteAsync, whenCompleteAsync
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.linkedin.alpini.base.concurrency.AsyncPromise
setComplete
-
-
-
-
Method Detail
-
isSuccess
public final boolean isSuccess()
Returnstrueif and only if the I/O operation was completed successfully.- Specified by:
isSuccessin interfaceAsyncFuture<T>
-
getCause
public final java.lang.Throwable getCause()
Returns the cause of the failed I/O operation if the I/O operation has failed.- Specified by:
getCausein interfaceAsyncFuture<T>- Returns:
- the cause of the failure.
nullif succeeded or this future is not completed yet.
-
setSuccess
public final boolean setSuccess(T result)
Marks this future as a success and notifies all listeners.- Specified by:
setSuccessin interfaceAsyncPromise<T>- Parameters:
result-- Returns:
trueif and only if successfully marked this future as a success. Otherwisefalsebecause this future is already marked as either a success or a failure.
-
setFailure
public final boolean setFailure(@Nonnull java.lang.Throwable cause)Marks this future as a failure and notifies all listeners.- Specified by:
setFailurein interfaceAsyncPromise<T>- Parameters:
cause-- Returns:
trueif and only if successfully marked this future as a failure. Otherwisefalsebecause this future is already marked as either a success or a failure.
-
addListener
@Nonnull public final AsyncPromise<T> addListener(@Nonnull AsyncFutureListener<T> listener)
Adds the specified listener to this future. The specified listener is notified when this future is done. If this future is already completed, the specified listener is notified immediately.- Specified by:
addListenerin interfaceAsyncFuture<T>- Specified by:
addListenerin interfaceAsyncPromise<T>- Parameters:
listener-- Returns:
thisto permit chaining of operations.
-
addListener
@Nonnull public final AsyncPromise<T> addListener(@Nonnull AsyncPromise<T> listener)
Adds the specified future as a listener to this future. The specified future is notified when this future is done. If this future is already completed, the specified future is notified immediately.- Specified by:
addListenerin interfaceAsyncFuture<T>- Specified by:
addListenerin interfaceAsyncPromise<T>- Parameters:
listener-- Returns:
thisto permit chaining of operations.
-
await
@Nonnull public final AsyncFuture<T> await() throws java.lang.InterruptedException
Waits for this future to be completed.- Specified by:
awaitin interfaceAsyncFuture<T>- Throws:
java.lang.InterruptedException- if the current thread was interrupted
-
awaitUninterruptibly
@Nonnull public final AsyncFuture<T> awaitUninterruptibly()
Waits for this future to be completed without interruption. This method catches anInterruptedExceptionand discards it silently.- Specified by:
awaitUninterruptiblyin interfaceAsyncFuture<T>
-
await
public final boolean await(long timeout, @Nonnull java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedExceptionWaits for this future to be completed within the specified time limit.- Specified by:
awaitin interfaceAsyncFuture<T>- Parameters:
timeout-unit-- Returns:
trueif and only if the future was completed within the specified time limit- Throws:
java.lang.InterruptedException- if the current thread was interrupted
-
awaitUninterruptibly
public final boolean awaitUninterruptibly(long timeout, @Nonnull java.util.concurrent.TimeUnit unit)Waits for this future to be completed within the specified time limit without interruption. This method catches anInterruptedExceptionand discards it silently.- Specified by:
awaitUninterruptiblyin interfaceAsyncFuture<T>- Parameters:
timeout-unit-- Returns:
trueif and only if the future was completed within the specified time limit
-
cancel
public final boolean cancel(boolean mayInterruptIfRunning)
Attempts to cancel execution of this task. This attempt will fail if the task has already completed, has already been cancelled, or could not be cancelled for some other reason. If successful, and this task has not started whencancelis called, this task should never run. If the task has already started, then themayInterruptIfRunningparameter determines whether the thread executing this task should be interrupted in an attempt to stop the task.After this method returns, subsequent calls to
isDone()will always returntrue. Subsequent calls toisCancelled()will always returntrueif this method returnedtrue.- Specified by:
cancelin interfacejava.util.concurrent.Future<T>- Parameters:
mayInterruptIfRunning-trueif the thread executing this task should be interrupted; otherwise, in-progress tasks are allowed to complete- Returns:
falseif the task could not be cancelled, typically because it has already completed normally;trueotherwise
-
isCancelled
public boolean isCancelled()
Returnstrueif this task was cancelled before it completed normally.- Specified by:
isCancelledin interfacejava.util.concurrent.Future<T>- Returns:
trueif this task was cancelled before it completed
-
isDone
public final boolean isDone()
Returnstrueif this task completed.Completion may be due to normal termination, an exception, or cancellation -- in all of these cases, this method will return
true.- Specified by:
isDonein interfacejava.util.concurrent.Future<T>- Returns:
trueif this task completed
-
get
public final T get() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
Waits if necessary for the computation to complete, and then retrieves its result.- Specified by:
getin interfacejava.util.concurrent.Future<T>- Returns:
- the computed result
- Throws:
java.util.concurrent.CancellationException- if the computation was cancelledjava.util.concurrent.ExecutionException- if the computation threw an exceptionjava.lang.InterruptedException- if the current thread was interrupted while waiting
-
get
public final T get(long timeout, @Nonnull java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.util.concurrent.TimeoutException
Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available.- Specified by:
getin interfacejava.util.concurrent.Future<T>- Parameters:
timeout- the maximum time to waitunit- the time unit of the timeout argument- Returns:
- the computed result
- Throws:
java.util.concurrent.CancellationException- if the computation was cancelledjava.util.concurrent.ExecutionException- if the computation threw an exceptionjava.lang.InterruptedException- if the current thread was interrupted while waitingjava.util.concurrent.TimeoutException- if the wait timed out
-
getNow
public final T getNow()
Description copied from interface:AsyncFutureNon-blocking variant ofFuture.get()- Specified by:
getNowin interfaceAsyncFuture<T>- Returns:
- value or
null
-
thenApply
public <U> java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T,? extends U> fn)
- Specified by:
thenApplyin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenApplyin classAbstractAsyncFuture<T>
-
thenApplyAsync
public <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T,? extends U> fn)
- Specified by:
thenApplyAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenApplyAsyncin classAbstractAsyncFuture<T>
-
thenApplyAsync
public <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T,? extends U> fn, java.util.concurrent.Executor executor)
- Specified by:
thenApplyAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenApplyAsyncin classAbstractAsyncFuture<T>
-
thenAccept
public java.util.concurrent.CompletionStage<java.lang.Void> thenAccept(java.util.function.Consumer<? super T> action)
- Specified by:
thenAcceptin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenAcceptin classAbstractAsyncFuture<T>
-
thenAcceptAsync
public java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T> action)
- Specified by:
thenAcceptAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenAcceptAsyncin classAbstractAsyncFuture<T>
-
thenAcceptAsync
public java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T> action, java.util.concurrent.Executor executor)
- Specified by:
thenAcceptAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenAcceptAsyncin classAbstractAsyncFuture<T>
-
thenRun
public java.util.concurrent.CompletionStage<java.lang.Void> thenRun(java.lang.Runnable action)
- Specified by:
thenRunin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenRunin classAbstractAsyncFuture<T>
-
thenRunAsync
public java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable action)
- Specified by:
thenRunAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenRunAsyncin classAbstractAsyncFuture<T>
-
thenRunAsync
public java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable action, java.util.concurrent.Executor executor)- Specified by:
thenRunAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenRunAsyncin classAbstractAsyncFuture<T>
-
thenCombine
public <U,V> java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiFunction<? super T,? super U,? extends V> fn)- Specified by:
thenCombinein interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenCombinein classAbstractAsyncFuture<T>
-
thenCombineAsync
public <U,V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiFunction<? super T,? super U,? extends V> fn)- Specified by:
thenCombineAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenCombineAsyncin classAbstractAsyncFuture<T>
-
thenCombineAsync
public <U,V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiFunction<? super T,? super U,? extends V> fn, java.util.concurrent.Executor executor)- Specified by:
thenCombineAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenCombineAsyncin classAbstractAsyncFuture<T>
-
thenAcceptBoth
public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiConsumer<? super T,? super U> action)- Specified by:
thenAcceptBothin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenAcceptBothin classAbstractAsyncFuture<T>
-
thenAcceptBothAsync
public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiConsumer<? super T,? super U> action)- Specified by:
thenAcceptBothAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenAcceptBothAsyncin classAbstractAsyncFuture<T>
-
thenAcceptBothAsync
public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U> other, java.util.function.BiConsumer<? super T,? super U> action, java.util.concurrent.Executor executor)- Specified by:
thenAcceptBothAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenAcceptBothAsyncin classAbstractAsyncFuture<T>
-
runAfterBoth
public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)- Specified by:
runAfterBothin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
runAfterBothin classAbstractAsyncFuture<T>
-
runAfterBothAsync
public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)- Specified by:
runAfterBothAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
runAfterBothAsyncin classAbstractAsyncFuture<T>
-
runAfterBothAsync
public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action, java.util.concurrent.Executor executor)- Specified by:
runAfterBothAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
runAfterBothAsyncin classAbstractAsyncFuture<T>
-
applyToEither
public <U> java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Function<? super T,U> fn)
- Specified by:
applyToEitherin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
applyToEitherin classAbstractAsyncFuture<T>
-
applyToEitherAsync
public <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Function<? super T,U> fn)
- Specified by:
applyToEitherAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
applyToEitherAsyncin classAbstractAsyncFuture<T>
-
applyToEitherAsync
public <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Function<? super T,U> fn, java.util.concurrent.Executor executor)
- Specified by:
applyToEitherAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
applyToEitherAsyncin classAbstractAsyncFuture<T>
-
acceptEither
public java.util.concurrent.CompletionStage<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Consumer<? super T> action)
- Specified by:
acceptEitherin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
acceptEitherin classAbstractAsyncFuture<T>
-
acceptEitherAsync
public java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Consumer<? super T> action)
- Specified by:
acceptEitherAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
acceptEitherAsyncin classAbstractAsyncFuture<T>
-
acceptEitherAsync
public java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T> other, java.util.function.Consumer<? super T> action, java.util.concurrent.Executor executor)
- Specified by:
acceptEitherAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
acceptEitherAsyncin classAbstractAsyncFuture<T>
-
runAfterEither
public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEither(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)- Specified by:
runAfterEitherin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
runAfterEitherin classAbstractAsyncFuture<T>
-
runAfterEitherAsync
public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action)- Specified by:
runAfterEitherAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
runAfterEitherAsyncin classAbstractAsyncFuture<T>
-
runAfterEitherAsync
public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?> other, java.lang.Runnable action, java.util.concurrent.Executor executor)- Specified by:
runAfterEitherAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
runAfterEitherAsyncin classAbstractAsyncFuture<T>
-
thenCompose
public <U> java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>> fn)
- Specified by:
thenComposein interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenComposein classAbstractAsyncFuture<T>
-
thenComposeAsync
public <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>> fn)
- Specified by:
thenComposeAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenComposeAsyncin classAbstractAsyncFuture<T>
-
thenComposeAsync
public <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>> fn, java.util.concurrent.Executor executor)
- Specified by:
thenComposeAsyncin interfacejava.util.concurrent.CompletionStage<T>- Overrides:
thenComposeAsyncin classAbstractAsyncFuture<T>
-
-