code: func (worker *copIteratorWorker) run(ctx context.Context) {
  	defer worker.wg.Done()
  	for task := range worker.taskCh {
  		respCh := worker.respChan
  		if respCh == nil {
  			respCh = task.respChan
  		}
  
  		bo := NewBackoffer(ctx, copNextMaxBackoff).WithVars(worker.vars)
  		worker.handleTask(bo, task, respCh)
  		if bo.totalSleep > 0 {
  			metrics.TiKVBackoffHistogram.Observe(float64(bo.totalSleep) / 1000)
  		}
  		close(task.respChan)
  		select {
  		case <-worker.finishCh:
  			return
  		default:
  		}
  	}
  }
docs: // run is a worker function that get a copTask from channel, handle it and
  // send the result back.