code: func (client *Client) AsyncRequestWithContext(ctx context.Context, asyncCommand AsyncCommand, callback WaitAsyncJobResultFunc) {
  	result, err := client.SyncRequestWithContext(ctx, asyncCommand)
  	if err != nil {
  		if !callback(nil, err) {
  			return
  		}
  	}
  
  	jobResult, ok := result.(*AsyncJobResult)
  	if !ok {
  		callback(nil, fmt.Errorf("wrong type, AsyncJobResult was expected instead of %T", result))
  	}
  
  	// Successful response
  	if jobResult.JobID == nil || jobResult.JobStatus != Pending {
  		callback(jobResult, nil)
  		// without a JobID, the next requests will only fail
  		return
  	}
  
  	for iteration := 0; ; iteration++ {
  		time.Sleep(client.RetryStrategy(int64(iteration)))
  
  		req := &QueryAsyncJobResult{JobID: jobResult.JobID}
  		resp, err := client.SyncRequestWithContext(ctx, req)
  		if err != nil && !callback(nil, err) {
  			return
  		}
  
  		result, ok := resp.(*AsyncJobResult)
  		if !ok {
  			if !callback(nil, fmt.Errorf("wrong type. AsyncJobResult expected, got %T", resp)) {
  				return
  			}
  		}
  
  		if !callback(result, nil) {
  			return
  		}
  	}
  }
docs: // AsyncRequestWithContext preforms a request with a context