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); } }