我想知道是否有办法弄清楚有多少观察者订阅了IObservable对象。
我有一个管理过滤IObservable实例的HashTable的类,我想实现一个“运行状况检查”例程,该例程可以确定订阅者是否已被删除/处置,而不是每个订阅者都必须明确通知这个他们完成的类(即应该通过Dispose()或Unsubscribe()隐式)。
这并没有真正回答这个问题 -
should-i-use-listiobserver-or-simply-actiont-to-keep-track-of-an-iobservable
任何想法Rx专家?
答案 0 :(得分:6)
内置任何内容,但您可以实现CountingSubject<T>
:
public class CountingSubject<T>
{
private ISubject<T> internalSubject;
private int subscriberCount;
public CountingSubject()
: this(new Subject<T>())
{
}
public CountingSubject(ISubject<T> internalSubject)
{
this.internalSubject = internalSubject;
}
public IDisposable Subscribe(IObserver<T> observer)
{
Interlocked.Increment(ref subscriberCount);
return new CompositeDisposable(
this.internalSubject.Subscribe(observer),
Disposable.Create(() => Interlocked.Decrement(ref subscriberCount))
});
}
public int SubscriberCount
{
get { return subscriberCount; }
}
}
答案 1 :(得分:1)
由于IObservable<T>
仅提供单个方法Subscribe
,因此您无法从中获取订阅者数量。订户列表是未通过此接口公开的实现细节。
为了获得计数,无论什么类实现IObservable
接口都必须公开一个属性或方法来获取计数,并且客户端代码必须将IObservable
引用转换为键入,然后访问属性或方法。