code: func (q *Queue) Dispose() []interface{} {
  	q.lock.Lock()
  	defer q.lock.Unlock()
  
  	q.disposed = true
  	for _, waiter := range q.waiters {
  		waiter.response.Add(1)
  		select {
  		case waiter.ready <- true:
  			// release Poll immediately
  		default:
  			// ignore if it's a timeout or in the get
  		}
  	}
  
  	disposedItems := q.items
  
  	q.items = nil
  	q.waiters = nil
  
  	return disposedItems
  }
docs: // Dispose will dispose of this queue and returns
  // the items disposed. Any subsequent calls to Get
  // or Put will return an error.