private void AsyncReadCallback(IAsyncResult asyncResult)
        {
            SendAndReceiveContext context = (SendAndReceiveContext)asyncResult.AsyncState;

            try {
                NetworkStream stream = context.stream;
                int           n      = stream.EndRead(asyncResult);
                if (n > 0)
                {
                    context.offset += n;
                    context.length -= n;
                    if (context.offset < context.buf.Length)
                    {
                        stream.BeginRead(context.buf, context.offset, context.length, new AsyncCallback(AsyncReadCallback), context);
                        return;
                    }
                }
                if (context.offset < context.buf.Length)
                {
                    context.e = new HproseException("Unexpected EOF");
                    context.callback(asyncResult);
                    return;
                }
                context.readCallback(asyncResult);
            }
            catch (Exception e) {
                context.e = e;
                context.callback(asyncResult);
            }
        }