static void OnReadData(IAsyncResult result)
            {
                if (result.CompletedSynchronously)
                {
                    return;
                }

                ReadDataAsyncResult thisPtr = (ReadDataAsyncResult)result.AsyncState;

                Exception completionException = null;
                bool      completeSelf        = false;

                try
                {
                    completeSelf = thisPtr.CompleteReadData(result);
                }
                catch (Exception e)
                {
                    completeSelf        = true;
                    completionException = e;
                    thisPtr.Cleanup();
                }

                if (completeSelf)
                {
                    thisPtr.Complete(false, completionException);
                }
            }
            public static ArraySegment <byte> End(IAsyncResult result)
            {
                ReadDataAsyncResult thisPtr = AsyncResult.End <ReadDataAsyncResult>(result);

                return(thisPtr.buffer);
            }
 ArraySegment <byte> EndReadData(IAsyncResult result)
 {
     return(ReadDataAsyncResult.End(result));
 }