RX - إلغاء الاشتراك من الأحداث
-
27-09-2019 - |
سؤال
لدي كائن inotifyPropertyChanged ، فو. أقوم بتحويل FOO إلى تيار يمكن ملاحظته باستخدام طريقة Fromevent الخاصة بـ RX:
var myFoo = new Foo();
var eventStream = Observable.FromEvent<PropertyChangedEventArgs>(myFoo, "PropertyChanged");
الآن أريد أن أستمع إلى خاصية معينة تم تغييرها ، وإذا .Progress == 100 ، إلغاء الاشتراك:
eventStream
.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
كيف يمكنني إلغاء الاشتراك عند التقدم == 100؟ إذا قمت بإضافة مكالمة هاتفية (1) بعد شرط. Where ، فهل هذا تلقائيًا إلغاء الاشتراك؟
المحلول
خيار واحد هو استخدام قيمة الإرجاع Subscribe
:
IDisposable subscription = eventStream.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
...
// Unsubscribe
subscription.Dispose();
أنا مشتبه فيه ذلك باستخدام Take(1)
من شأنه بالفعل إلغاء الاشتراك ، وهو مايو كن أكثر تراييا من أجلك. بعد أن نظرت إليها قليلاً ، أنا متأكد من هذا سيكون قم بإلغاء الاشتراك ، حيث ستطلق الرسالة "المكتملة" ، والتي تفلت بشكل عام تلقائيًا. ليس لدي وقت للتحقق من ذلك بالتأكيد في الوقت الحالي ، أخشى :(
نصائح أخرى
يمكنك استخدام طريقة takehile:
eventStream.TakeWhile(e => myFoo.Progress != 100);
خارق إرادة التخلص من التسلسل الأساسي الذي يمكن ملاحظته عندما يعود مسنده خطأ ، سوف تفعل ذلك ليس يجب أن تتصل بالتخلص يدويًا.