كيف يمكنني تحديد عدد / مشتركين واضحين في ؟
-
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
الرجوع إلى هذا النوع ، ثم الوصول إلى الخاصية أو الطريقة.