Chamada WinForms para método assíncrono desliga programa
Estou trabalhando com esse problema há algum tempo, mas agora eu realmente gostaria de entender o que está errado. Eu tenho um aplicativo bastante simples (é um plug-in SVN turtoise para o youtrack, mas posso reproduzir o problema com um aplicativo trivial do winforms).
Eu tenho um método assíncronoResolveIssue
public async Task<bool> ResolveIssue(Issue issue, int revision, string[] pathList)
{
await Task.Delay(1000);
return true;
}
Tudo o que tenho que fazer para criar um impasse é chamar esse método assíncrono em umButton
manipulador de eventos e chamadaTask.Wait
ouTask.Result
, como isso
private void buttonOk_Click(object sender, System.EventArgs e)
{
var asyncResolvedIssue = api.ResolveIssue(issue, revision, pathList);
if (asyncResolvedIssue.Result) {} // <== deadlock!
}
Agora eu entendo que é bastante estranho ter um método assíncrono e esperá-lo ativamente, mas por que isso geraria um impasse ?!