Winforms-Aufruf der asynchronen Methode hängt das Programm auf
Ich habe eine Weile an diesem Problem gearbeitet, aber jetzt möchte ich wirklich verstehen, was schief geht. Ich habe eine ziemlich einfache Anwendung (es ist ein Schildkröten-SVN-Plugin für youtrack, aber ich kann das Problem mit einer einfachen Winforms-App reproduzieren).
Ich habe eine asynchrone MethodeResolveIssue
public async Task<bool> ResolveIssue(Issue issue, int revision, string[] pathList)
{
await Task.Delay(1000);
return true;
}
Alles, was ich tun muss, um einen Deadlock zu erstellen, ist diese asynchrone Methode in a aufzurufenButton
Ereignishandler und AufrufTask.Wait
oderTask.Result
, so was
private void buttonOk_Click(object sender, System.EventArgs e)
{
var asyncResolvedIssue = api.ResolveIssue(issue, revision, pathList);
if (asyncResolvedIssue.Result) {} // <== deadlock!
}
Jetzt verstehe ich, dass es ziemlich seltsam ist, eine asynchrone Methode zu haben und aktiv darauf zu warten, aber warum würde sie einen Deadlock erzeugen ?!