为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
MMMHUHU 2023-06-25 13:55:37
我准备了 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”术语中的可区分联合。


查看完整回答
反对 回复 2023-06-25
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信