code: func (dc *DispatcherClient) CallAsync(funcName string, request interface{}) (*AsyncResult, error) {
  	req := dc.getRequest(funcName, request)
  
  	innerAr, err := dc.c.CallAsync(req)
  	if err != nil {
  		return nil, err
  	}
  
  	ch := make(chan struct{})
  	ar := &AsyncResult{
  		Done: ch,
  	}
  
  	go func() {
  		<-innerAr.Done
  		ar.Response, ar.Error = getResponse(innerAr.Response, innerAr.Error)
  		close(ch)
  	}()
  
  	return ar, nil
  }
docs: // CallAsync calls the given function asynchronously.
  //
  // All the non-internal request and response types must be registered
  // via RegisterType() before the first call to this function.