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 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 ¿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;
        }
    }

Respuestas a la pregunta(3)

Su respuesta a la pregunta