小编all*_*ran的帖子

通过回调消息代理将推送公开为 IAsyncEnumerable

我正在使用一个第三方库,它充当发布-订阅消息代理的接口。经纪人是 Solace PubSub+。

对于订阅者,供应商库采用“通过回调推送消息”模式。

我正在围绕供应商库编写一个自己的包装器库,以便其他开发人员更容易使用(隐藏库与网络通信方式的所有内部结构等)。

同样,我认为将订户提要公开为 可能会有所帮助IAsyncEnumerable,并且我认为这可能是 的一个很好的用例System.Threading.Channels。我有两个担忧:

  1. 渠道在这里是否合适,或者我是否过度设计了?即,是否有更“C# 惯用”的方式来包装回调?
  2. 我的包装器实现安全吗EnumerableBroker,还是我在某个地方陷入了异步陷阱?

我意识到第一个问题可能比 SO 更适合 CodeReview,但由于该问题的答案也与第二个问题相关,因此将它们放在一起似乎是合适的。值得注意的是:我正在避免使用IObservable/Rx,因为我的目标是让我的界面比供应商的界面基础,而不是要求其他开发人员和我自己学习 Rx!对于中间的通道,理解生产者和消费者进程如何独立也是微不足道的,而对于可观察的,我的第一个心理过程是“好吧,那么生产者和消费者仍然是独立的吗?乍一看,我必须现在就了解调度程序...天哪,我只使用一个怎么样await foreach?”

这是消费消息的最小模型,没有EnumerableBroker

// mockup of third party class
private class Broker
{
    // mockup of how the third party library pushes messages via callback
    public void Subscribe(EventHandler<int> handler) => this.handler = handler;

    //simulate the broker pushing messages. Not "real" code
    public void Start()
    {
        Task.Run
        (
            () =>
            {
                for …
Run Code Online (Sandbox Code Playgroud)

c# asynccallback iasyncenumerable system.threading.channels

1
推荐指数
1
解决办法
594
查看次数