code: func NewBoundedFrequencyRunner(name string, fn func(), minInterval, maxInterval time.Duration, burstRuns int) *BoundedFrequencyRunner {
  	timer := realTimer{Timer: time.NewTimer(0)} // will tick immediately
  	<-timer.C()                                 // consume the first tick
  	return construct(name, fn, minInterval, maxInterval, burstRuns, timer)
  }
docs: // NewBoundedFrequencyRunner creates a new BoundedFrequencyRunner instance,
  // which will manage runs of the specified function.
  //
  // All runs will be async to the caller of BoundedFrequencyRunner.Run, but
  // multiple runs are serialized. If the function needs to hold locks, it must
  // take them internally.
  //
  // Runs of the function will have at least minInterval between them (from
  // completion to next start), except that up to bursts may be allowed.  Burst
  // runs are "accumulated" over time, one per minInterval up to burstRuns total.
  // This can be used, for example, to mitigate the impact of expensive operations
  // being called in response to user-initiated operations. Run requests that
  // would violate the minInterval are coallesced and run at the next opportunity.
  //
  // The function will be run at least once per maxInterval. For example, this can
  // force periodic refreshes of state in the absence of anyone calling Run.
  //
  // Examples:
  //
  // NewBoundedFrequencyRunner("name", fn, time.Second, 5*time.Second, 1)
  // - fn will have at least 1 second between runs
  // - fn will have no more than 5 seconds between runs
  //
  // NewBoundedFrequencyRunner("name", fn, 3*time.Second, 10*time.Second, 3)
  // - fn will have at least 3 seconds between runs, with up to 3 burst runs
  // - fn will have no more than 10 seconds between runs
  //
  // The maxInterval must be greater than or equal to the minInterval,  If the
  // caller passes a maxInterval less than minInterval, this function will panic.