我最近一直在阅读有关 IObservable 的内容。到目前为止,我已经查看了各种 SO 问题,并观看了有关他们可以做什么的视频。我认为的整个“推动”机制非常出色,但我仍在试图弄清楚一切究竟是做什么的。从我的阅读中,我猜想在某种程度上IObservable
是可以“观察”的东西,并且IObservers
是“观察者”。
所以现在我要尝试在我的应用程序中实现它。在开始之前,我想先弄清楚一些事情。我已经看到 IObservable 与 IEnumerable 相反,但是,在我的特定实例中,我真的看不到任何可以合并到我的应用程序中的地方。
目前,我大量使用事件,以至于我可以看到“管道”开始变得难以管理。我想,IObservable 可以帮助我。
考虑以下设计,这是我在应用程序中围绕 I/O 的包装器(仅供参考,我通常必须处理字符串):
我有一个名为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。随时纠正我的任何“误解”:)