docs: public <T> T invoke(Callable<T> c) throws Exception {
          if (canProceed()) {
              return c.call();
          }
          else {
              throw mapException(new FlowRateExceededException());
          }
      }