具有公共Notify <t>(T值)方法的可观察子类

时间:2015-08-24 21:33:48

标签: c# system.reactive

是否有Observable<T>类的子类公开对Notify<T>(T value)方法(或访问Notifier,扩展方法)的访问权限,以便我们可以临时调用observable.Notify(t)所有订阅都被通知(OnNext在同一个线程上调用。)

我对FromEventPattern不感兴趣。

2 个答案:

答案 0 :(得分:3)

ISubject<T>界面继承IObservable<T>IObserver<T>

var subject = new Subject<string>();
subject.Subscribe(text => Console.WriteLine(text));
subject.OnNext("Hello");
subject.OnNext("World!");

IObserver<T>.OnNext基本上是您的Notify方法。

更多阅读:

答案 1 :(得分:2)

你当然可以使用Subject<string>来提供一个观察者的对象(即你可以调用.OnNext(string))并且是一个可以订阅的可观察对象。

唯一的缺点是,任何有权访问Subject<string>的代码也可以致电.OnCompleted().OnError(...)并破坏您的订阅者代码。

另一种选择是这样做:

Action<string> notify = null;

var observable = Observable.FromEvent<string>(h => notify += h, h => notify -= h);

var subscription = observable.Subscribe(x => Console.WriteLine(x));

notify("Hello");

你现在有了一个简单的Action<string>委托,你可以调用它来推送一个值,只要你保持订阅活着,客户就不能通过对.OnCompleted()或{的恶意电话来杀死你的程序{1}}。