C# IObservable-如何向集合发送/发布/推送新值
我想从我的服务层公开一个IObservable 为了简单起见,让我们假设服务层在内部(通过套接字)从远程服务器获取消息,并且套接字库需要一个IMessageResponse对象,该对象具有要传递给它的MessageReceived方法 在内部,服务层创建MessageResponse对象,并在消息到达时通过操作回调得到通知 考虑到这种设计,我需要能够将新消息推送到IObservable,但在我看到的任何示例中,Observable.XYZ似乎都不支持简单的发送/发布/推送方法 在这种情况下,如何连接Observable.XYZ 我想要这样的东西。。。注意:我知道这是IObservable的一个非常基本的实现,但我没有想到我需要自己编写这段代码。。。我本以为盒子里会有我想要的东西C# IObservable-如何向集合发送/发布/推送新值,c#,.net,asynchronous,system.reactive,C#,.net,Asynchronous,System.reactive,我想从我的服务层公开一个IObservable 为了简单起见,让我们假设服务层在内部(通过套接字)从远程服务器获取消息,并且套接字库需要一个IMessageResponse对象,该对象具有要传递给它的MessageReceived方法 在内部,服务层创建MessageResponse对象,并在消息到达时通过操作回调得到通知 考虑到这种设计,我需要能够将新消息推送到IObservable,但在我看到的任何示例中,Observable.XYZ似乎都不支持简单的发送/发布/推送方法 在这种情况下,如何
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上发送自己的消息?