public static ValueTask <ArraySegment <byte> > PeekAsync(this SocketInput input) { while (input.IsCompleted) { var fin = input.CheckFinOrThrow(); var begin = input.ConsumingStart(); var segment = begin.PeekArraySegment(); input.ConsumingComplete(begin, begin); if (segment.Count != 0 || fin) { return(new ValueTask <ArraySegment <byte> >(segment)); } } return(new ValueTask <ArraySegment <byte> >(input.PeekAsyncAwaited())); }