Winforms llamada al método asíncrono cuelga el programa
He estado trabajando en este problema por un tiempo, pero ahora realmente me gustaría entender qué sale mal. Tengo una aplicación bastante simple (es un complemento SVN de tortuga para youtrack, pero puedo reproducir el problema con una aplicación trivial de winforms).
Tengo un método asincrónicoResolveIssue
public async Task<bool> ResolveIssue(Issue issue, int revision, string[] pathList)
{
await Task.Delay(1000);
return true;
}
Todo lo que tengo que hacer para crear un punto muerto es llamar a este método asíncrono en unButton
controlador de eventos y llamarTask.Wait
oTask.Result
, Me gusta esto
private void buttonOk_Click(object sender, System.EventArgs e)
{
var asyncResolvedIssue = api.ResolveIssue(issue, revision, pathList);
if (asyncResolvedIssue.Result) {} // <== deadlock!
}
Ahora entiendo que es bastante extraño tener un método asíncrono y esperarlo activamente, pero ¿por qué generaría un punto muerto?