[英]How to create an Observable “channel” in Rx?
我开始使用Reactive Extensions将push-> pull bridge转换为更简单的结构。
所以现在我有了一个带有(私有)事件的类,并从中创建了一个Observable
。
class WithEvents {
public class MyEvent {}
private delegate void MyEventHandler(MyEvent e);
private event MyEventHandler EventRaised;
Public IObservable<MyEvent> TheEvents;
public void Foo() {
EventRaised(new MyEvent());
}
}
事实是,此事件在这里似乎是不需要的脚手架。 所以我想知道:是否有一种方法可以构造“裸露”的可观察物体,让我可以“推动”事件呢?
class WithChannel {
public class MyEvent {}
public IObservable<MyEvent> EventRaised {get} = new Channel<MyEvent>();
public void Foo() {
((Channel)EventRaised).DoNext(new MyEvent());
}
}
是的,有一个叫做Subject
的东西(在System.Reactive.Subjects
命名空间中),它确实可以做到:
class WithChannel {
public class MyEvent {
}
private readonly Subject<MyEvent> _event;
public WithChannel() {
_event = new Subject<MyEvent>();
}
public IObservable<MyEvent> EventRaised => _event;
public void Foo() {
_event.OnNext(new MyEvent());
}
}
通常不建议使用主题,但是对于此特定任务,我认为很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.