code: func (c *Controller) processLoop() {
  	for {
  		obj := c.config.Queue.Pop()
  		err := c.config.Process(obj)
  		if err != nil {
  			if c.config.RetryOnError {
  				// This is the safe way to re-enqueue.
  				c.config.Queue.AddIfNotPresent(obj)
  			}
  		}
  	}
  }
docs: // processLoop drains the work queue.
  // TODO: Consider doing the processing in parallel. This will require a little thought
  // to make sure that we don't end up processing the same object multiple times
  // concurrently.