y/y.go
func (t *Throttle) Finish() error {
	t.wg.Wait()
	close(t.ch)
	close(t.errCh)
	for err := range t.errCh {
		if err != nil {
			return err
		}
	}
	return nil
}
func (t *Throttle) Finish() error {
	t.wg.Wait()
	close(t.ch)
	close(t.errCh)
	for err := range t.errCh {
		if err != nil {
			return err
		}
	}
	return nil
}
// Finish waits until all workers have finished working. It would return any
// error passed by Done.