захватить stdout и stderr в правильном порядке

Я запускаю процесс из C # следующим образом:

public bool Execute()
{
    ProcessStartInfo startInfo = new ProcessStartInfo();

    startInfo.Arguments =  "the command";
    startInfo.FileName = "C:\\MyApp.exe";

    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;

    Log.LogMessage("{0} {1}", startInfo.FileName, startInfo.Arguments);

    using (Process myProcess = Process.Start(startInfo))
    {
        StringBuilder output = new StringBuilder();
        myProcess.OutputDataReceived += delegate(object sender, DataReceivedEventArgs e)
        {
            Log.LogMessage(Thread.CurrentThread.ManagedThreadId.ToString() + e.Data);
        };
        myProcess.ErrorDataReceived += delegate(object sender, DataReceivedEventArgs e)
        {
            Log.LogError(Thread.CurrentThread.ManagedThreadId.ToString() +  " " + e.Data);            
        };

        myProcess.BeginErrorReadLine();
        myProcess.BeginOutputReadLine();

        myProcess.WaitForExit();

    }

    return false;
}

Но это имеет проблему ... если рассматриваемое приложение записывает в std out и std err в следующем порядке:

std out: msg 1
std err: msg 2
std out: msg 3

Тогда вывод, который я вижу из журналов:

msg 2
msg 1
msg 3

Это происходит потому, что обработчики событий выполняются в другом потоке. Поэтому мой вопрос заключается в том, как можно поддерживать порядок записи процесса в std err и std out?

Я думал об использовании метки времени, но не думаю, что это сработает из-за преимущественного характера потоков.

Обновление: подтверждено, что использование отметки времени в данных бесполезно.

Окончательное обновление: принятый ответ решает эту проблему - однако у него есть один недостаток: когда объединяются потоки, невозможно узнать, в какой поток был записан. Следовательно, если вам требуется логика записи в сбой stderr ==, а не код завершения приложения, вы все равно можете быть испорчены.

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

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