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