code: func (c *Controller) Run(threadiness int, stopCh <-chan struct{}) error {
  	defer utilruntime.HandleCrash()
  	defer c.workqueue.ShutDown()
  
  	// Start the informer factories to begin populating the informer caches
  	klog.Info("Starting Foo controller")
  
  	// Wait for the caches to be synced before starting workers
  	klog.Info("Waiting for informer caches to sync")
  	if ok := cache.WaitForCacheSync(stopCh, c.deploymentsSynced, c.foosSynced); !ok {
  		return fmt.Errorf("failed to wait for caches to sync")
  	}
  
  	klog.Info("Starting workers")
  	// Launch two workers to process Foo resources
  	for i := 0; i < threadiness; i++ {
  		go wait.Until(c.runWorker, time.Second, stopCh)
  	}
  
  	klog.Info("Started workers")
  	<-stopCh
  	klog.Info("Shutting down workers")
  
  	return nil
  }
docs: // Run will set up the event handlers for types we are interested in, as well
  // as syncing informer caches and starting workers. It will block until stopCh
  // is closed, at which point it will shutdown the workqueue and wait for
  // workers to finish processing their current work items.