@Override
  public <U> ParSeqBasedCompletionStage<U> handle(BiFunction<? super T, Throwable, ? extends U> fn)
  {
    return nextStageByComposingTask(_task.transform("handle", prevTaskResult -> {
      try {
        return Success.of(fn.apply(prevTaskResult.isFailed() ? null : prevTaskResult.get(), prevTaskResult.getError()));
      } catch (Throwable throwable) {
        return Failure.of(throwable);
      }
    }));
  }
@Test
  public void testHandle_unwrapException() throws Exception
  {
    // CompletionStage explicitly failed should fail with unwrapped exception
    CompletionStage<String> completionStage = createTestFailedStage(EXCEPTION);

    BiFunction<String, Throwable, ?> handler = mock(BiFunction.class);
    finish(completionStage.handle(handler));

    verify(handler, times(1)).apply(isNull(String.class), verifyException());
  }