code: func (p *workerPool) Run() ([]interface{}, []error) {
  	for i := 0; i < p.concurrency; i++ {
  		go p.work()
  	}
  
  	p.wg.Add(len(p.Tasks))
  	for _, task := range p.Tasks {
  		p.tasksChan <- task
  	}
  
  	// all workers return
  	close(p.tasksChan)
  
  	p.wg.Wait()
  	return p.workResults()
  }
docs: // Run runs all work within the pool and blocks until it's finished.