如何确定IObservable <T>上有多少/清除订户?

Chr*_*ebb 2 c# system.reactive

我想知道是否有办法弄清楚有多少观察者订阅了IObservable对象.

我有一个管理HashTable的过滤IObservable实例的类,我想实现一个"健康检查"例程,可以确定订阅者是否已被删除/处置,而每个订阅者都不必明确通知此类他们'完成(即应通过Dispose()或Unsubscribe()隐式).

这并没有真正回答这个问题 -

应该-I-使用-listiobserver或 - 简Actiont就是对保跟踪的-AN-的IObservable

任何想法Rx专家?

Ric*_*lay 6

There's nothing built in, but you could implement a 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)