code: func (client *Client) AsyncListWithContext(ctx context.Context, g Listable) (<-chan interface{}, <-chan error) {
  	outChan := make(chan interface{}, client.PageSize)
  	errChan := make(chan error)
  
  	go func() {
  		defer close(outChan)
  		defer close(errChan)
  
  		req, err := g.ListRequest()
  		if err != nil {
  			errChan <- err
  			return
  		}
  		client.PaginateWithContext(ctx, req, func(item interface{}, e error) bool {
  			if item != nil {
  				outChan <- item
  				return true
  			}
  			errChan <- e
  			return false
  		})
  	}()
  
  	return outChan, errChan
  }
docs: // AsyncListWithContext lists the given resources (and paginate till the end)
  //
  //
  //	// NB: goroutine may leak if not read until the end. Create a proper context!
  //	ctx, cancel := context.WithCancel(context.Background())
  //	defer cancel()
  //
  //	outChan, errChan := client.AsyncListWithContext(ctx, new(egoscale.VirtualMachine))
  //
  //	for {
  //		select {
  //		case i, ok := <- outChan:
  //			if ok {
  //				vm := i.(egoscale.VirtualMachine)
  //				// ...
  //			} else {
  //				outChan = nil
  //			}
  //		case err, ok := <- errChan:
  //			if ok {
  //				// do something
  //			}
  //			// Once an error has been received, you can expect the channels to be closed.
  //			errChan = nil
  //		}
  //		if errChan == nil && outChan == nil {
  //			break
  //		}
  //	}
  //