我准备了 WinForms 应用程序来测试单行异步方法是否会导致死锁。button1_Click事件等待GetZero单行异步代理方法等待的任务。然而,这会导致僵局。为什么?我读过单行异步方法不需要在await完成后继续任何操作,因此没有委托发布到消息泵导致死锁。
作为参考,button2_Click事件在没有代理调用者的情况下等待任务的结果GetZero,并且应用程序工作正常。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var zero = ProxyCallery().Result;
label1.Text += $"{zero}";
}
private void button2_Click(object sender, EventArgs e)
{
var zero = GetZero().Result;
label1.Text += $"{zero}";
}
private async Task<int> ProxyCallery()
{
return await GetZero();
}
private async Task<int> GetZero()
{
await Task.Delay(100).ConfigureAwait(false);
return await Task.FromResult(0);
}
}
为什么会button1_Click造成僵局?
ITMISS
相关分类