private void ProcessPendingActions() { Incoming xPendingRead = mIncompletePendingRead; if (xPendingRead != null || mPendingReads.TryTake(out xPendingRead, 5)) { var xNrOfBytesToRead = xPendingRead.Packet.Length - xPendingRead.CurrentPos; var xBytesRead = TryRead(xPendingRead.Packet, xPendingRead.CurrentPos, xNrOfBytesToRead, 5); xPendingRead.CurrentPos += xBytesRead; if (xPendingRead.CurrentPos == xPendingRead.Packet.Length) { // Full packet received, process it xPendingRead.Completed(xPendingRead.Packet); mIncompletePendingRead = null; } else { mIncompletePendingRead = xPendingRead; } } //process_writes: // now process sends. Outgoing xPendingWrite; if (mPendingWrites.TryTake(out xPendingWrite, 5)) { if (!SendRawData(xPendingWrite.Packet)) { throw new Exception("SendRawData returned false!"); } if (xPendingWrite.Completed != null) { xPendingWrite.Completed.Set(); } } }