Der folgende Code wird für immer einfrieren.
%Vor% Wenn ich den Aufruf mit dem auskommentierten Code in DoSomethingAsync
umschalte, verhält es sich wie erwartet. Ich vermute, dass irgendwie die verschachtelten Warten einen Deadlock verursachen, aber ich bin mir nicht sicher warum oder wie ich es beheben kann.
Wenn Button_Click
im Thread GUI
ausgeführt wird, liegt ein Deadlock vor.
Wenn Sie Wait
für eine Aufgabe verwenden, blockieren Sie den Thread synchron, bis die Aufgabe endet, aber die Aufgabe wird niemals enden, da die Fortsetzung (der Abschluss von Task.Delay(2000);
) ebenfalls auf dem GUI-Thread ausgeführt werden muss ist blockiert auf Wait).
Sie haben mehrere Lösungen. Verwenden Sie ConfigureAwait(false)
, um den SynchronizationContext des GUI-Threads nicht zu erfassen:
Oder (was ich empfehle) benutze einen async void
Event-Handler (was der einzige geeignete Platz für eine async void
-Methode ist):
Tags und Links .net c# task-parallel-library async-await delay