@Override
  public ParSeqBasedCompletionStage<Void> runAfterBoth(CompletionStage<?> other, Runnable action)
  {
    Task<?> that = getOrGenerateTaskFromStage(other);
    return nextStageByComposingTask(Task.par(_task, that).flatMap("runAfterBoth", t -> Task.action(action::run)));
  }
@Test public void testRunAfterBoth() throws Exception {
    CompletionStage<String> completionStage1 = createTestStage(TESTVALUE1);
    CompletionStage<String> completionStage2 = createTestStage(TESTVALUE2);

    Runnable runnable = mock(Runnable.class);
    finish(completionStage1.runAfterBoth(completionStage2, runnable));
    verify(runnable, times(1)).run();
  }