public static ValueTask <int> ReadAsync(this SocketInput input, byte[] buffer, int offset, int count) { while (input.IsCompleted) { var fin = input.CheckFinOrThrow(); var begin = input.ConsumingStart(); int actual; var end = begin.CopyTo(buffer, offset, count, out actual); input.ConsumingComplete(end, end); if (actual != 0 || fin) { return(new ValueTask <int>(actual)); } } return(new ValueTask <int>(input.ReadAsyncAwaited(buffer, offset, count))); }