コード例 #1
0
        public IAsyncResult BeginReadMessage(AsyncCallback asyncCallback, object stateObject)
        {
            WorkerAsyncResult workerResult;

            if (_eof)
            {
                workerResult = new WorkerAsyncResult(this, stateObject, asyncCallback, null, 0, 0);
                workerResult.InvokeCallback(-1);
                return(workerResult);
            }

            workerResult = new WorkerAsyncResult(this, stateObject, asyncCallback,
                                                 _readHeaderBuffer, 0,
                                                 _readHeaderBuffer.Length);

            IAsyncResult result = _transportAPM.BeginRead(_readHeaderBuffer, 0, _readHeaderBuffer.Length,
                                                          _readFrameCallback, workerResult);

            if (result.CompletedSynchronously)
            {
                ReadFrameComplete(result);
            }

            return(workerResult);
        }
コード例 #2
0
        //
        // Loops while subsequent completions are sync.
        //
        private void StartReading()
        {
            while (true)
            {
                IAsyncResult ar = _transportAPM.BeginRead(_request.Buffer, _request.Offset + _totalRead, _request.Count - _totalRead, s_readCallback, this);
                if (!ar.CompletedSynchronously)
                {
#if DEBUG
                    _request._DebugAsyncChain = ar;
#endif
                    break;
                }

                int bytes = _transportAPM.EndRead(ar);

                if (CheckCompletionBeforeNextRead(bytes))
                {
                    break;
                }
            }
        }