code: public static <T1, T2, T3, T4, R> Function4<T1, T2, T3, T4, R> memoizeQuadFunctionAsync(final Function4<T1, T2, T3, T4, R> fn, ScheduledExecutorService ex, String cron) {
        Function1<Tuple4<T1, T2, T3, T4>, R> memoise2 = memoizeFunctionAsync((final Tuple4<T1, T2, T3, T4> quad) -> fn.apply(quad._1(), quad._2(), quad._3(), quad._4()), ex, cron);
          return (t1, t2, t3, t4) -> memoise2.apply(tuple(t1, t2, t3, t4));
      }
docs: Memoize this function and update cached values on a schedule
  Does not support null keys
  
  @param fn  Function to Memoize
  @param ex Scheduled Executor Service
  @param cron Cron expression for updating cached values asynchonrously
  @return Memoized asynchronously updating function