Правильный способ обработки стандартной ошибки и вывод из программы при порождении через класс процесса из C #?

Я читаю документацию дляProcess.StandardOutput, который имеет эту цитату:

Условие взаимоблокировки может возникнуть, если родительский процесс вызывает p.WaitForExit перед p.StandardOutput.ReadToEnd и дочерний процесс записывает достаточно текста, чтобы заполнить перенаправленный поток.

Вот мне и интересно. Как правильно сделать это, если я также боюсь, что StandardError может быть заполнено в некоторых сценариях?

Нужно ли использовать цикл, чтобы чередовать чтение со стандартного вывода и ошибки, чтобы избежать либо заполнения, либо этого простого кода достаточно:

string error = proc.StandardError.ReadToEnd();
string output = proc.StandardOutput.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);

Отредактировано после публикации некоторых ответов

Так что это правильный подход?

var output = new StringBuilder();
proc.OutputDataReceived += (s, e) => output.Append(e.Data);
proc.BeginOutputReadLine();
string error = proc.StandardError.ReadToEnd();
bool didFinish = proc.WaitForExit(60000);

И тогда я использую контент stringbuilder, только если процесс действительно завершен.

Это правильный подход тогда?

Ответы на вопрос(2)

Ваш ответ на вопрос