كيف يمكنني تحديد عدد / مشتركين واضحين في ؟

StackOverflow https://stackoverflow.com/questions/4252632

  •  27-09-2019
  •  | 
  •  

سؤال

أتساءل عما إذا كانت هناك طريقة لمعرفة عدد المراقبين الذين يتم مشتركين في كائن قابل للرسوم.

لقد حصلت على فصل يدير علامة تجزئة من مثيلات قابلة للتصفية ، وأرغب في تنفيذ روتين "فحص صحي" يمكن أن يحدد ما إذا كان قد تمت إزالة / التخلص من المشتركين ، دون أن يضطر كل مشترك إلى إخطار هذه الفئة بشكل صريح بأنهم "إعادة الانتهاء (أي يجب أن تكون ضمنية عبر dispose () أو إلغاء الاشتراك ()).

هذا لا يجيب حقًا على السؤال -

يجب أن يكون le-listiobserver-or-simply-actiont-to-track-an-an-iobservable

أي أفكار خبراء RX؟

هل كانت مفيدة؟

المحلول

لا يوجد شيء مدمج ، لكن يمكنك تنفيذ ملف 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; }
    }
}

نصائح أخرى

حيث IObservable<T> فقط توفر طريقة واحدة ، Subscribe, ، لا توجد طريقة يمكنك الحصول على عدد المشتركين منه. قائمة المشتركين هي تفاصيل تنفيذ لا تتعرض من خلال هذه الواجهة.

من أجل الحصول على العد ، مهما كانت الفئة تنفذ IObservable يجب أن تكشف الواجهة خاصية أو طريقة للحصول على العد ، وسيتعين على رمز العميل إلقاء IObservable الرجوع إلى هذا النوع ، ثم الوصول إلى الخاصية أو الطريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top