C# await async und Exceptions

Magic1416

Lieutenant
Registriert
Dez. 2003
Beiträge
513
Hi, ich habe ein Problem mit folgendem Code:

Code:
  private async void button1_Click(object sender, EventArgs e)
        {
            Task t = null;
            try
            {
                t = doSomethingAsync();
                await t;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private async Task doSomethingAsync() {
            await Task.Run(() => doSomething(1));           
        }

        private void doSomething(int i)
        {         
                throw new Exception($"Exception {i}");     //Hier gibts ein unhandled exception
        }

Ich nutze Dot Net 4.7.2. Laut allen Dokus die ich so gelesen habe, müsste der Code funktionieren. Aber Visual Studio 2017 bringt immer eine User Unhandled Exception in der Funktion doSomething().
767985


Danach ist er trotzdem im Catch Block und gibt die MessageBox mit dem richtigen Text aus.
767986


767987


Das es eigentlich funktioniert sieht man daran, dass wenn man die kompilierte Exe ausführt, kein Programmabsturz auftritt.
Was läuft hier falsch ?

Danke, gruß Magic
 
Einfach ne Ausnahme hinzufügen oder das Pausieren bei Fehlern deaktivieren (Rechtsklick auf Fehler und irgendwie "Fortfahren bei Fehler"(?))?

Zumindest war das glaube ich so, als ich Visual Studio das letzte Mal benutzt habe, der pausiert quasi nur, um die Bescheid zu sagen "Hey, hier Fehler!"

Mein Rechner ist schon aus, sonst würde ich wohl nachschauen...

Lg
 
Das Problem ist der async call innerhalb einer async void Methode. Das versucht man bei der paralallen Programmierung mit await soweit es geht zu vermeiden.

Besser Commands nehmen. Dann wird auch der UI-Thread wieder frei und Exception-Handling funktioniert so wie vorgesehen.
 
Zuletzt bearbeitet:
Zurück
Oben