code: public <T, E extends Exception> T doUntilResult(ExceptionalSupplier<T, E> task)
        throws InterruptedException, BackoffStoppedException, E {
      T result = task.get(); // give an immediate try
      return (result != null) ? result : retryWork(task);
    }
docs: Executes the given task using the configured backoff strategy until the task succeeds as
  indicated by returning a non-null value.
  
  @param task the retryable task to execute until success
  @return the result of the successfully executed task
  @throws InterruptedException if interrupted while waiting for the task to execute successfully
  @throws BackoffStoppedException if the backoff stopped unsuccessfully
  @throws E if the task throws