Estoy usando Reactive Extensions para facilitar el manejo de eventos en mis ViewModels (aplicaciones Silverlight y/o Wp7). En aras de la simplicidad vamos a decir que tengo una línea como esta en el ctor de mi VM:¿Qué hacer con los servidores IObster desechados?
Observable.FromEvent<PropertyChangedEventArgs>(
h => MyObject.PropertyChanged += h,
h => MyObject.PropertyChanged -= h)
.Where(e=>e.PropertyName == "Title")
.Throttle(TimeSpan.FromSeconds(0.5))
.Subscribe(e=>{/*do something*/});
Esto devuelve un objeto IDisposable, , que si se echa va a darse de baja.(¿Estoy en lo correcto en esta suposición?)
Si no tengo ninguna referencia, tarde o temprano se recogerá y mi manejador será anulado.
Normalmente tengo un List<IDisposable>
en mi VM, y le agrego suscripciones, pero me siento sucio al respecto, como si no estuviera haciendo algo de la manera correcta de Rx.
¿Cuál es la mejor práctica, patrón recomendado en situaciones como esta?
Sé acerca de la pérdida de eventos de memoria .NET, pero me salté el hecho de que no importa que IObservable disponga los observadores en Finalize, porque finalize no se llama aquí ... ¡Gracias! – TDaver
Si estuviera especificando cómo 'IObservable' debe comportarse y debe usarse, especifico que cada consumidor escrito apropiadamente debe mantener una referencia al 'IDisposable' devuelto en algún lugar, y las implementaciones deben considerarse libres de (si no se recomienda) cancelar cualquier suscripción cuyo 'IDisposable' asociado esté fuera del alcance. –
supercat