如何在 Rx 中创建一个 Observable "channel"?
How to create an Observable "channel" in Rx?
我开始使用 Reactive Extensions 将我的推 -> 拉桥转换为更简单的结构。
所以现在我有一个带有(私人)事件的 class,以及从中创建的 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());
}
}
事实是,这个事件在这里似乎是不需要的脚手架。所以我想知道:有没有办法构建一个 'bare' Observable,我可以只 'push' 事件?
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());
}
}
通常不推荐使用 subjects,但对于这个特定任务,我认为它很好。
我开始使用 Reactive Extensions 将我的推 -> 拉桥转换为更简单的结构。
所以现在我有一个带有(私人)事件的 class,以及从中创建的 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());
}
}
事实是,这个事件在这里似乎是不需要的脚手架。所以我想知道:有没有办法构建一个 'bare' Observable,我可以只 'push' 事件?
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());
}
}
通常不推荐使用 subjects,但对于这个特定任务,我认为它很好。