code: func (kl *Kubelet) dispatchWork(pod *v1.Pod, syncType kubetypes.SyncPodType, mirrorPod *v1.Pod, start time.Time) {
  	if kl.podIsTerminated(pod) {
  		if pod.DeletionTimestamp != nil {
  			// If the pod is in a terminated state, there is no pod worker to
  			// handle the work item. Check if the DeletionTimestamp has been
  			// set, and force a status update to trigger a pod deletion request
  			// to the apiserver.
  			kl.statusManager.TerminatePod(pod)
  		}
  		return
  	}
  	// Run the sync in an async worker.
  	kl.podWorkers.UpdatePod(&UpdatePodOptions{
  		Pod:        pod,
  		MirrorPod:  mirrorPod,
  		UpdateType: syncType,
  		OnCompleteFunc: func(err error) {
  			if err != nil {
  				metrics.PodWorkerDuration.WithLabelValues(syncType.String()).Observe(metrics.SinceInSeconds(start))
  				metrics.DeprecatedPodWorkerLatency.WithLabelValues(syncType.String()).Observe(metrics.SinceInMicroseconds(start))
  			}
  		},
  	})
  	// Note the number of containers for new pods.
  	if syncType == kubetypes.SyncPodCreate {
  		metrics.ContainersPerPodCount.Observe(float64(len(pod.Spec.Containers)))
  	}
  }
docs: // dispatchWork starts the asynchronous sync of the pod in a pod worker.
  // If the pod is terminated, dispatchWork