code: func (w WatchSet) watchMany(ctx context.Context) error {
  	// Set up a goroutine for each watcher.
  	triggerCh := make(chan struct{}, 1)
  	watcher := func(chunk []<-chan struct{}) {
  		if err := watchFew(ctx, chunk); err == nil {
  			select {
  			case triggerCh <- struct{}{}:
  			default:
  			}
  		}
  	}
  
  	// Apportion the watch channels into chunks we can feed into the
  	// watchFew helper.
  	idx := 0
  	chunk := make([]<-chan struct{}, aFew)
  	for watchCh := range w {
  		subIdx := idx % aFew
  		chunk[subIdx] = watchCh
  		idx++
  
  		// Fire off this chunk and start a fresh one.
  		if idx%aFew == 0 {
  			go watcher(chunk)
  			chunk = make([]<-chan struct{}, aFew)
  		}
  	}
  
  	// Make sure to watch any residual channels in the last chunk.
  	if idx%aFew != 0 {
  		go watcher(chunk)
  	}
  
  	// Wait for a channel to trigger or timeout.
  	select {
  	case <-triggerCh:
  		return nil
  	case <-ctx.Done():
  		return ctx.Err()
  	}
  }
docs: // watchMany is used if there are many watchers.