code: public <R> R fold(Function<? super T,? extends R> success, Function<? super Throwable,? extends R> failure){
          try {
              return success.apply(future.join());
          }catch(Throwable t){
              return failure.apply(t);
          }
  
      }
docs: Blocking analogue to visitAsync. Visit the state of this Future, block until ready.
  
  <pre>
  {@code
  Future.ofResult(10)
  .visit(i->i*2, e->-1);
  20
  
  Future.<Integer>ofError(new RuntimeException())
  .visit(i->i*2, e->-1)
  [-1]
  
  }
  </pre>
  @param success Function to execute if the previous stage completes successfully
  @param failure  Function to execute if this Future fails
  @return Result of the executed Function