【发布时间】:2014-08-22 22:05:12
【问题描述】:
我已经解决这个问题一段时间了,但现在我真的很想了解哪里出了问题。我有一个相当简单的应用程序(它是一个用于 youtrack 的 turtoise SVN 插件,但我可以用一个简单的 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!
}
现在我明白了,有一个异步方法并主动等待它是相当奇怪的,但它为什么会产生死锁呢?!
【问题讨论】:
-
为什么投了 2 票?至少发表评论。
标签: c# async-await deadlock