@ApiStatus.Experimental
  public static <T, E extends Throwable>
  T compute(@NotNull ThrowableComputable<T, E> computable, long threshold, @NotNull LongConsumer consumer) throws E {
    long startNanoTime = System.nanoTime();
    try {
      return computable.compute();
    }
    finally {
      long duration = getDurationMillis(startNanoTime);
      if (duration >= threshold) consumer.accept(duration);
    }
  }
@ApiStatus.Experimental
  public static <T, E extends Throwable>
  T compute(@NotNull ThrowableComputable<T, E> computable, long threshold, @NotNull LongConsumer consumer)