我准备了 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造成僵局?
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
在我看来,这就像你想要的:
[ProtoContract]
[ProtoInclude(1, typeof(Foo)]
...
[ProtoInclude(N, typeof(Bar)]
class SomeBase {}
[ProtoContract]
class Foo : SomeBase {...}
...
[ProtoContract]
class Bar : SomeBase {...}
然后使用Deserialize<SomeBase>(...). 这将被映射为oneof“.proto”术语中的可区分联合。
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消