繁体   English   中英

如何在Rx中创建一个可观察的“通道”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM