func (c *remotingClient) InvokeAsync(ctx context.Context, addr string, request *RemotingCommand, timeout time.Duration, callback func(*ResponseFuture)) error {
	conn, err := c.connect(ctx, addr)
	if err != nil {
		return err
	}
	resp := NewResponseFuture(ctx, request.Opaque, timeout, callback)
	c.responseTable.Store(resp.Opaque, resp)
	err = c.sendRequest(conn, request)
	if err != nil {
		return err
	}
	resp.SendRequestOK = true
	go c.receiveAsync(resp)
	return nil
}
// InvokeAsync send request without blocking, just return immediately.
InvokeAsync send request without blocking, just return immediately.
// InvokeAsync send request without blocking just return immediately .
func (c *remotingClient) InvokeAsync(ctx context.Context, addr string, request *RemotingCommand, timeout time.Duration, callback func(*ResponseFuture)) error {
	conn, err := c.connect(ctx, addr)
	if err != nil {
		return err
	}
	resp := NewResponseFuture(ctx, request.Opaque, timeout, callback)
	c.responseTable.Store(resp.Opaque, resp)
	err = c.sendRequest(conn, request)
	if err != nil {
		return err
	}
	resp.SendRequestOK = true
	go c.receiveAsync(resp)
	return nil
}
func ( c * remotingClient ) InvokeAsync ( ctx context . Context , addr string , request * RemotingCommand , timeout time . Duration , callback func ( * ResponseFuture ) ) error { conn , err := c . connect ( ctx , addr ) if err != nil { return err } resp := NewResponseFuture ( ctx , request . Opaque , timeout , callback ) c . responseTable . Store ( resp . Opaque , resp ) err = c . sendRequest ( conn , request ) if err != nil { return err } resp . SendRequestOK = true go c . receiveAsync ( resp ) return nil }
InvokeAsync send request without blocking, just return immediately.
InvokeAsync send request without blocking just return immediately .