private static bool TryParsePartitioned(ChunkedStream input, out RpcPartitionedMessage message) { message = null; if (input == null || !input.CanRead) { return(false); } var inputDataLen = input.Length; if (inputDataLen < RpcMessageSizeOf.Header) { return(false); } var context = new ParserContext { Input = input, InputLength = inputDataLen, HeaderBuffer = RpcByteBufferCache.HeaderCache.Acquire() }; try { context.Message = new RpcPartitionedMessage(); var initialPosition = input.Position; input.Position = 0; try { if (!ParseHeader(context)) { return(false); } if (!ParseData(context)) { return(false); } } finally { input.Position = initialPosition; } if (context.Completed) { message = context.Message; input.TrimLeft(context.StreamOffset); return(true); } } finally { RpcByteBufferCache.HeaderCache.Release(context.HeaderBuffer); } return(false); }