code: func (c *AggregationController) processNextWorkItem() bool {
  	key, quit := c.queue.Get()
  	defer c.queue.Done(key)
  	if quit {
  		return false
  	}
  
  	if aggregator.IsLocalAPIService(key.(string)) {
  		// for local delegation targets that are aggregated once per second, log at
  		// higher level to avoid flooding the log
  		klog.V(5).Infof("OpenAPI AggregationController: Processing item %s", key)
  	} else {
  		klog.Infof("OpenAPI AggregationController: Processing item %s", key)
  	}
  
  	action, err := c.syncHandler(key.(string))
  	if err == nil {
  		c.queue.Forget(key)
  	} else {
  		utilruntime.HandleError(fmt.Errorf("loading OpenAPI spec for %q failed with: %v", key, err))
  	}
  
  	switch action {
  	case syncRequeue:
  		if aggregator.IsLocalAPIService(key.(string)) {
  			klog.V(7).Infof("OpenAPI AggregationController: action for local item %s: Requeue after %s.", key, successfulUpdateDelayLocal)
  			c.queue.AddAfter(key, successfulUpdateDelayLocal)
  		} else {
  			klog.V(7).Infof("OpenAPI AggregationController: action for item %s: Requeue.", key)
  			c.queue.AddAfter(key, successfulUpdateDelay)
  		}
  	case syncRequeueRateLimited:
  		klog.Infof("OpenAPI AggregationController: action for item %s: Rate Limited Requeue.", key)
  		c.queue.AddRateLimited(key)
  	case syncNothing:
  		klog.Infof("OpenAPI AggregationController: action for item %s: Nothing (removed from the queue).", key)
  	}
  
  	return true
  }
docs: // processNextWorkItem deals with one key off the queue.  It returns false when it's time to quit.