wychwytywanie procesu wyjściowego i stderr w prawidłowej kolejności

Rozpoczynam proces od C # w następujący sposób:

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

Ale to ma problem ... jeśli aplikacja, o której mowa, pisze w standardzie out i std err w tej kolejności:

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

Wyjściem, które widzę z dzienników, jest:

msg 2
msg 1
msg 3

Wygląda na to, że procedury obsługi zdarzeń są wykonywane w innym wątku. Tak więc moje pytanie brzmi: w jaki sposób można zachować kolejność pisania procesu do standardowego błędu i std out?

Myślałem o użyciu znacznika czasu, ale nie sądzę, aby działało to z powodu prewencyjnej natury wątków.

Aktualizacja: Potwierdzono, że użycie znacznika czasu na danych nie ma sensu.

Końcowa aktualizacja: zaakceptowana odpowiedź rozwiązuje ten problem - jednak ma jedną wadę, gdy strumienie są scalane, nie ma możliwości sprawdzenia, do którego strumienia został zapisany. Dlatego, jeśli potrzebujesz logiki błędu zapisu do stderr == zamiast kodu wyjścia aplikacji, możesz być jeszcze przykręcony.

questionAnswers(2)

yourAnswerToTheQuestion