Winforms appel de méthode asynchrone raccroche programme

J'ai travaillé autour de ce problème pour un certain temps, mais maintenant j'aimerais vraiment comprendre ce qui va mal. J'ai une assez simple demande (c'est un turtoise SVN du plugin pour youtrack, mais je peux reproduire le problème avec un trivial application winforms).

J'ai une méthode asynchrone ResolveIssue

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

    return true;
}

Tout ce que j'ai à faire pour créer un blocage est d'appeler cette méthode asynchrone dans un Button gestionnaire d'événements, et d'appeler Task.Wait ou Task.Result, à l'instar de ce

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

Maintenant je comprends que c'est plutôt bizarre d'avoir une méthode asynchrone et activement à l'attendre, mais pourquoi serait-il générer une impasse?!

  • Pourquoi le 2 votes contre? Au moins partager un commentaire.
InformationsquelleAutor bas | 2014-08-22