C# IObservable-如何向集合发送/发布/推送新值

C# IObservable-如何向集合发送/发布/推送新值,c#,.net,asynchronous,system.reactive,C#,.net,Asynchronous,System.reactive,我想从我的服务层公开一个IObservable 为了简单起见,让我们假设服务层在内部(通过套接字)从远程服务器获取消息,并且套接字库需要一个IMessageResponse对象,该对象具有要传递给它的MessageReceived方法 在内部,服务层创建MessageResponse对象,并在消息到达时通过操作回调得到通知 考虑到这种设计,我需要能够将新消息推送到IObservable,但在我看到的任何示例中,Observable.XYZ似乎都不支持简单的发送/发布/推送方法 在这种情况下,如何

我想从我的服务层公开一个IObservable

为了简单起见,让我们假设服务层在内部(通过套接字)从远程服务器获取消息,并且套接字库需要一个IMessageResponse对象,该对象具有要传递给它的MessageReceived方法

在内部,服务层创建MessageResponse对象,并在消息到达时通过操作回调得到通知

考虑到这种设计,我需要能够将新消息推送到IObservable,但在我看到的任何示例中,Observable.XYZ似乎都不支持简单的发送/发布/推送方法

在这种情况下,如何连接Observable.XYZ

我想要这样的东西。。。注意:我知道这是IObservable的一个非常基本的实现,但我没有想到我需要自己编写这段代码。。。我本以为盒子里会有我想要的东西

public class PushObservable<T> : IObservable<T>
{
    private IList<IObserver<T>> _listeners = new List<IObserver<T>>();

    public void Send(T value)
    {
        foreach (var listener in _listeners) 
            listener.OnNext(value); 
    }

    public IDisposable Subscribe(IObserver<T> observer)
    { 
        _listeners.Add(observer);
    }
}
公共类PushObservable:IOObservable
{
私有IList_侦听器=新列表();
公共无效发送(T值)
{
foreach(变量侦听器在_侦听器中)
OnNext(值);
}
公共IDisposable订阅(IObserver观察员)
{ 
_添加(观察者);
}
}

您已经重写了一个已经存在的对象!你的“PushObservable”实际上是
主题
,它是Rx中的基本对象之一


如果你真的想用Rx的方式来思考这个问题,你可能会从一个来自插座的
IObservable
开始,然后你会选择一个
IObservable
,因为在一天结束时,您正在响应的事件是线路上的字节。

如果您反编译RX库并查看其中一个主题(IOBServer和IObservable),这就是它们的工作原理。您能否澄清这个问题-您是否希望将内部服务层公开为IObservable,或者你还想在IObservable上发送自己的消息?