code: func RetryWithBackoffCtx(ctx context.Context, backoff Backoff, fn func() error) error {
  	var err error
  	for {
  		select {
  		case <-ctx.Done():
  			return nil
  		default:
  		}
  
  		err = fn()
  
  		retriableErr, isRetriableErr := err.(apierrors.Retriable)
  
  		if err == nil || (isRetriableErr && !retriableErr.Retry()) {
  			return err
  		}
  
  		_time.Sleep(backoff.Duration())
  	}
  }
docs: // RetryWithBackoffCtx takes a context, a Backoff, and a function to call that returns an error
  // If the context is done, nil will be returned
  // If the error is nil then the function will no longer be called
  // If the error is Retriable then that will be used to determine if it should be
  // retried