最近我一直在了解 IObservable。到目前为止,我已经查看了各种 Stack Overflow 问题,并观看了一些视频来了解它们的功能。整个“推送”机制我认为非常棒,但我仍然在尝试弄清楚每件事情的具体含义。从我的阅读中,我猜想 IObservable
在某种程度上是可以“被观察”的东西,而 IObservers
则是“观察者”。
现在我要尝试在我的应用程序中实现此功能。在开始之前,我有几件事情需要梳理清楚。我看到 IObservable 是 IEnumerable 的相反,但是在我的特定实例中,我实在找不到任何可以将其纳入我的应用程序的地方。
目前,我大量使用事件,以至于我发现“管道”正在变得难以管理。我认为,IObservable 可以帮助我解决这个问题。
考虑以下设计,这是我在我的应用程序中包装 I/O 的方式(FYI,我通常必须处理字符串):
我有一个名为 IDataIO
的基本接口:
public interface IDataIO
{
event OnDataReceived;
event OnTimeout:
event OnTransmit;
}
目前,我有三个实现该接口的类,每个类都以某种方式使用异步方法调用,从而引入了某种类型的多线程处理:
public class SerialIO : IDataIO;
public class UdpIO : IDataIO;
public class TcpIO : IDataIO;
每个类都有一个单独的实例,被包装到我的最终类IO中(也实现了IDataIO - 符合我的策略模式):
public class IO : IDataIO
{
public SerialIO Serial;
public UdpIO Udp;
public TcpIO Tcp;
}
我已经使用策略模式来封装这三个类,所以在运行时更改不同的 IDataIO
实例时对最终用户是“不可见”的。你可以想象一下,这导致了背景中相当多的“事件管道”。那么,在我的情况下,我如何利用“推送”通知?我想要将数据简单地推送给任何感兴趣的人,而不是订阅事件(例如 DataReceived 等)。我有点不确定从哪里开始。我仍在尝试使用
Subject
的想法/泛型类,以及它的各种形式(ReplaySubject/AsynSubject/BehaviourSubject)。请有经验的人给我指点一下(也许参考我的设计)?或者这是否根本不适合使用 IObservable
?PS. 请随意纠正我任何“误解” :)
DataReceived
? - Simon