我準備了 WinForms 應用程序來測試單行異步方法是否會導致死鎖。button1_Click事件等待GetZero單行異步代理方法等待的任務。然而,這會導致僵局。為什么?我讀過單行異步方法不需要在await完成后繼續(xù)任何操作,因此沒有委托發(fā)布到消息泵導致死鎖。作為參考,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條經(jīng)驗 獲得超8個贊
在我看來,這就像你想要的:
[ProtoContract]
[ProtoInclude(1, typeof(Foo)]
...
[ProtoInclude(N, typeof(Bar)]
class SomeBase {}
[ProtoContract]
class Foo : SomeBase {...}
...
[ProtoContract]
class Bar : SomeBase {...}
然后使用Deserialize<SomeBase>(...). 這將被映射為oneof“.proto”術語中的可區(qū)分聯(lián)合。
- 1 回答
- 0 關注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消