code: func (w *WorkerPool) Shutdown() {
  	w.mu.Lock()
  	defer w.mu.Unlock()
  
  	if w.done {
  		return
  	}
  	var wg sync.WaitGroup
  	wg.Add(len(w.workers))
  
  	for _, worker := range w.workers {
  		go func(worker *Worker) {
  			worker.Shutdown()
  			wg.Done()
  		}(worker)
  	}
  	wg.Wait()
  	w.done = true
  }
docs: // Shutdown sends a Shutdown signal to each of the Workers in the WorkerPool and
  // waits for them all to finish shutting down.