使用 ProtoBuf-Net 在网络上自描述消息

我准备了 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造成僵局?


MMMHUHU
浏览 99回答 1
1回答

ITMISS

在我看来,这就像你想要的:[ProtoContract][ProtoInclude(1, typeof(Foo)]...[ProtoInclude(N, typeof(Bar)]class SomeBase {}[ProtoContract]class Foo : SomeBase {...}...[ProtoContract]class Bar : SomeBase {...}然后使用Deserialize<SomeBase>(...). 这将被映射为oneof“.proto”术语中的可区分联合。
打开App,查看更多内容
随时随地看视频慕课网APP