Class ClosingFuture.Combiner

java.lang.Object
com.google.common.util.concurrent.ClosingFuture.Combiner
Direct Known Subclasses:
ClosingFuture.Combiner2, ClosingFuture.Combiner3, ClosingFuture.Combiner4, ClosingFuture.Combiner5
Enclosing class:
ClosingFuture<V extends @Nullable Object>

@DoNotMock("Use ClosingFuture.whenAllSucceed() or .whenAllComplete() instead.") public static class ClosingFuture.Combiner extends Object
A builder of a ClosingFuture step that is derived from more than one input step.

See ClosingFuture.whenAllComplete(Iterable) and ClosingFuture.whenAllSucceed(Iterable) for how to instantiate this class.

Example:

final ClosingFuture<BufferedReader> file1ReaderFuture = ...;
final ClosingFuture<BufferedReader> file2ReaderFuture = ...;
ListenableFuture<Integer> numberOfDifferentLines =
      ClosingFuture.whenAllSucceed(file1ReaderFuture, file2ReaderFuture)
          .call(
              (closer, peeker) -> {
                BufferedReader file1Reader = peeker.getDone(file1ReaderFuture);
                BufferedReader file2Reader = peeker.getDone(file2ReaderFuture);
                return countDifferentLines(file1Reader, file2Reader);
              },
              executor)
          .closing(executor);
Since:
30.0
  • Field Details

  • Method Details

    • call

      public <V extends @Nullable Object> ClosingFuture<V> call(ClosingFuture.Combiner.CombiningCallable<V> combiningCallable, Executor executor)
      Returns a new ClosingFuture pipeline step derived from the inputs by applying a combining function to their values. The function can use a ClosingFuture.DeferredCloser to capture objects to be closed when the pipeline is done.

      If this combiner was returned by a ClosingFuture.whenAllSucceed(Iterable) method and any of the inputs fail, so will the returned step.

      If the combiningCallable throws a CancellationException, the pipeline will be cancelled.

      If the combiningCallable throws an ExecutionException, the cause of the thrown ExecutionException will be extracted and used as the failure of the derived step.

    • callAsync

      public <V extends @Nullable Object> ClosingFuture<V> callAsync(ClosingFuture.Combiner.AsyncCombiningCallable<V> combiningCallable, Executor executor)
      Returns a new ClosingFuture pipeline step derived from the inputs by applying a ClosingFuture-returning function to their values. The function can use a ClosingFuture.DeferredCloser to capture objects to be closed when the pipeline is done (other than those captured by the returned ClosingFuture).

      If this combiner was returned by a ClosingFuture.whenAllSucceed(Iterable) method and any of the inputs fail, so will the returned step.

      If the combiningCallable throws a CancellationException, the pipeline will be cancelled.

      If the combiningCallable throws an ExecutionException, the cause of the thrown ExecutionException will be extracted and used as the failure of the derived step.

      If the combiningCallable throws any other exception, it will be used as the failure of the derived step.

      If an exception is thrown after the combiningCallable creates a ClosingFuture, then none of the closeable objects in that ClosingFuture will be closed.

      Usage guidelines for this method:

      The same warnings about doing heavyweight operations within ClosingFuture.transformAsync(AsyncClosingFunction, Executor) apply here.