@Override
  public <U> ParSeqBasedCompletionStage<Void> thenAcceptBothAsync(CompletionStage<? extends U> other,
      BiConsumer<? super T, ? super U> action, Executor executor)
  {
    Task<U> that = getOrGenerateTaskFromStage(other);
    return nextStageByComposingTask(Task.par(_task, that).flatMap("thenAcceptBothAsync", (t, u) -> Task.blocking(() -> {
      action.accept(t, u);
      return null;
    }, executor)));
  }
@Test public void testThenAcceptBothAsync() throws Exception {
    CountDownLatch waitLatch = new CountDownLatch(1);
    CompletionStage<String> completionStage1 = createTestStage(TESTVALUE1);
    CompletionStage<String> completionStage2 = createTestStage(TESTVALUE2);

    finish(completionStage1.thenAcceptBothAsync(completionStage2, (a, b) -> {
      assertEquals(THREAD_NAME_VALUE, Thread.currentThread().getName());
      waitLatch.countDown();
    }, _mockExecutor));
    assertTrue(waitLatch.await(1000, TimeUnit.MILLISECONDS));
  }