code: func (chordAsyncResult *ChordAsyncResult) GetWithTimeout(timeoutDuration, sleepDuration time.Duration) ([]reflect.Value, error) {
  	if chordAsyncResult.backend == nil {
  		return nil, ErrBackendNotConfigured
  	}
  
  	var (
  		results []reflect.Value
  		err     error
  	)
  
  	timeout := time.NewTimer(timeoutDuration)
  	for {
  		select {
  		case <-timeout.C:
  			return nil, ErrTimeoutReached
  		default:
  			for _, asyncResult := range chordAsyncResult.groupAsyncResults {
  				_, errcur := asyncResult.Touch()
  				if errcur != nil {
  					return nil, err
  				}
  			}
  
  			results, err = chordAsyncResult.chordAsyncResult.Touch()
  			if err != nil {
  				return nil, nil
  			}
  			if results != nil {
  				return results, err
  			}
  			time.Sleep(sleepDuration)
  		}
  	}
  }
docs: // GetWithTimeout returns result of a chord with a timeout (synchronous blocking call)