@Override
  public <U, V> ParSeqBasedCompletionStage<V> thenCombine(CompletionStage<? extends U> other,
      BiFunction<? super T, ? super U, ? extends V> fn)
  {
    Task<U> that = getOrGenerateTaskFromStage(other);
    return nextStageByComposingTask(Task.par(_task, that).map("thenCombine", fn::apply));
  }
@Test
  public void testThenCombine() throws Exception
  {
    CompletionStage<String> completionStage1 = createTestStage(TESTVALUE1);
    CompletionStage<String> completionStage2 = createTestStage(TESTVALUE2);

    BiFunction<String, String, Integer> combiner = mock(BiFunction.class);
    when(combiner.apply(TESTVALUE1, TESTVALUE2)).thenReturn(0);

    Consumer<Integer> intConsumer = mock(Consumer.class);
    finish(completionStage1.thenCombine(completionStage2, combiner).thenAccept(intConsumer));

    verify(combiner).apply(TESTVALUE1, TESTVALUE2);
    verify(intConsumer).accept(0);
  }