代码之家  ›  专栏  ›  技术社区  ›  Chris Webb

如何确定iobservable上有多少/清除订户?

  •  2
  • Chris Webb  · 技术社区  · 14 年前

    我想知道是否有一种方法可以计算出有多少观察者订阅了一个iobservable对象。

    我有一个类来管理过滤后的iobservable实例的哈希表,我想实现一个“健康检查”例程,它可以确定订阅服务器是否已被删除/释放,而不需要每个订阅服务器都显式地通知此类它们已完成(即,应该通过dispose()或unsubscribe()隐式)。

    这并不能真正回答问题-

    should-i-use-listiobserver-or-simply-actiont-to-keep-track-of-an-iobservable

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Richard Szalay    14 年前

    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; }
        }
    }
    
        2
  •  1
  •   Jim Mischel    14 年前

    IObservable<T> Subscribe

    IObservable