El método de lectura StreamReader no lee el número de caracteres especificados

Tengo que analizar un archivo grande, así que en lugar de hacer:

 string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
 parse(unparsedFile); // takes another 4 seconds

Quiero aprovechar los primeros 4 segundos e intentar hacer ambas cosas al mismo tiempo haciendo algo como:

        while (true)
        {
            char[] buffer = new char[1024];

            var charsRead = sr.Read(buffer, 0, buffer.Length);

            if (charsRead < 1)
                break;

            if (charsRead != 1024)
            {
                Console.Write("Here");  // debuger stops here several times why?
            }

            addChunkToQueue(buffer); 
        }

Aquí está la imagen del depurador: (Agreguéint counter&nbsp;para mostrar en qué iteración leemos menos de 1024 bytes)

Tenga en cuenta que allí donde se leen 643 caracteres y no 1024. En la siguiente iteración obtengo:

Creo que debería leer 1024 bytes todo el tiempo hasta llegar a la última iteración en la que los bytes remanentes son menos de 1024.

Así que mi pregunta es&nbsp;¿Por qué leeré el número "aleatorio" de caracteres mientras itero el ciclo while?

Editar

No sé con qué tipo de flujo estoy tratando. Ejecuto un proceso como:

        ProcessStartInfo psi = new ProcessStartInfo("someExe.exe")
        {
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true,
        };

        // execute command and return ouput of command
        using (var proc = new Process())
        {
            proc.StartInfo = psi;
            proc.Start();                               

            var output = proc.StandardOutput;  //  <------------- this is where I get the strem

            //if (string.IsNullOrEmpty(output))
            //output = proc.StandardError.ReadToEnd();

            return output;
        }
    }