private async Task <FrameHeader> ReadFrameAsync() { // Read frame header await EnsureIncomingBytesAsync(FrameHeader.Size).ConfigureAwait(false); FrameHeader frameHeader = FrameHeader.ReadFrom(_incomingBuffer.ActiveSpan); _incomingBuffer.Discard(FrameHeader.Size); if (frameHeader.Length > FrameHeader.MaxLength) { throw new Http2ProtocolException(Http2ProtocolErrorCode.FrameSizeError); } // Read frame contents await EnsureIncomingBytesAsync(frameHeader.Length).ConfigureAwait(false); return(frameHeader); }