code: public synchronized void trigger(final VALUE value, final boolean immediately) throws CouldNotPerformException {
          latestValue = value;
          triggered = true;
          try {
              if (timeout.isActive()) {
                  if (!immediately) {
                      changeDetected = true;
                      return;
                  }
                  timeout.cancel();
              }
  
              changeDetected = false;
              callRelay();
              timeout.start();
          } catch (final ShutdownInProgressException ex) {
              // just skip trigger when shutdown is in progress
          } catch (final CouldNotPerformException ex) {
              throw new CouldNotPerformException("Could not trigger " + this, ex);
          }
      }
docs: This method triggers the relay if no trigger was relayed within the defined max frequency or the {@code immediately} flag was set.
  
  Note: Triggers are maybe filtered but the last trigger call will always result in a relay to guarantee the latest value will relayed.
  
  @param value the new value which should be published via the next relay.
  @param immediately this flag forces the trigger to relay immediately without respect to the defined max frequency.
  @throws CouldNotPerformException is thrown if the trigger could not be handled (e.g. because of a system shutdown).