Winforms вызов асинхронного метода зависает программа
Я работал над этой проблемой некоторое время, но теперь я действительно хотел бы понять, что идет не так. У меня довольно простое приложение (это плагин Turtoise SVN для youtrack, но я могу воспроизвести проблему с помощью тривиального приложения winforms).
У меня есть асинхронный методResolveIssue
public async Task<bool> ResolveIssue(Issue issue, int revision, string[] pathList)
{
await Task.Delay(1000);
return true;
}
Все, что мне нужно сделать, чтобы создать тупик, это вызвать этот асинхронный метод вButton
обработчик события и вызовTask.Wait
или жеTask.Result
, как это
private void buttonOk_Click(object sender, System.EventArgs e)
{
var asyncResolvedIssue = api.ResolveIssue(issue, revision, pathList);
if (asyncResolvedIssue.Result) {} // <== deadlock!
}
Теперь я понимаю, что довольно странно иметь асинхронный метод и активно его ждать, но с какой стати это может привести к тупику ?!