Winforms Aufruf der asynchronen Methode hängt Programm

Habe ich gearbeitet, um dieses problem für eine Weile, aber jetzt würde ich wirklich gerne verstehen, was schief geht. Ich habe eine ziemlich einfache Anwendung (es ist eine turtoise SVN-plugin für youtrack, aber ich kann das problem reproduzieren mit einer trivialen winforms-app).

Ich habe eine async-Methode ResolveIssue

public async Task<bool> ResolveIssue(Issue issue, int revision, string[] pathList)
{
    await Task.Delay(1000);

    return true;
}

Alles, was ich zu tun, um ein deadlock rufen Sie diese asynchrone Methode in einem Button event-handler und rufen Task.Wait oder Task.Result, wie diese

private void buttonOk_Click(object sender, System.EventArgs e)
{
    var asyncResolvedIssue = api.ResolveIssue(issue, revision, pathList);
    if (asyncResolvedIssue.Result) {} //<== deadlock!
}

Jetzt verstehe ich, es ist ziemlich seltsam, um eine async-Methode aktiv und warten Sie nicht darauf, aber warum sollte es erzeugen einen deadlock?!

  • Warum die 2 runter Stimmen? Zumindest teilen sich ein Kommentar.
InformationsquelleAutor bas | 2014-08-22
Schreibe einen Kommentar