code: public void invokeListeners(Action3<T, Long, TimeUnit> invocationAction, long duration, TimeUnit timeUnit) {
          ListenerInvocationException exception = null;
          for (ListenerHolder<T> listener : listeners) {
              if (!listener.subscription.isUnsubscribed()) {
                  try {
                      invocationAction.call(listener.delegate, duration, timeUnit);
                  } catch (Throwable e) {
                      exception = handleListenerError(exception, listener, e);
                  }
              }
          }
  
          if (null != exception) {
              exception.finish();
              /*Do not bubble event notification errors to the caller, event notifications are best effort.*/
              logger.error("Error occured while invoking event listeners.", exception);
          }
      }
docs: Invoke listeners with an action expressed by the passed {@code invocationAction}. This method does the necessary
  validations required for invoking a listener and also guards against a listener throwing exceptions on invocation.
  
  @param invocationAction The action to perform on all listeners.
  @param duration Duration.
  @param timeUnit Time unit for the duration.