Async wait block Hauptbenutzeroberfläche

Ich verwende die neuen asynchronen Warte-Funktionen, um ein Upgrade von Backgroundworker in C # durchzuführen. Im folgenden Code versuche ich, die Ausführung mehrerer Aufgaben mit der ContinueWith-Methode zu replizieren.

        Task t1 = new Task
        (
            () =>
            {
                Thread.Sleep(10000);

                // make the Task throw an exception
                MessageBox.Show("This is T1");
            }
        );

        Task t2 = t1.ContinueWith
        (
            (predecessorTask) =>
            {

                if (predecessorTask.Exception != null)
                {
                    MessageBox.Show("Predecessor Exception within Continuation");

                    return;
                }

                Thread.Sleep(1000);
                MessageBox.Show("This is Continuation");
            },

            TaskContinuationOptions.AttachedToParent | TaskContinuationOptions.OnlyOnRanToCompletion
        );

        t1.Start();

        try
        {
           t1.Wait(); <------ Comment 
           t2.Wait(); <------ Comment 
        }
        catch (AggregateException ex)
        {
            MessageBox.Show(ex.InnerException.Message);
        }  

Meine Frage lautet, wann ich t1.wait und t2.wait kommentiere. Aufgaben blockieren die Benutzeroberfläche nicht. Wenn ich jedoch t1.wait und t2.wait auskommentiere, blockiert die Benutzeroberfläche, bis der Thread abgeschlossen ist. Das gewünschte Verhalten besteht darin, Fehler im try / catch-Block abzufangen, ohne die Benutzeroberfläche zu blockieren. Was vermisse ich?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage