Estoy buscando implementar algún comportamiento de regulación en uno de mis modelos de vista. Es una aplicación Silverlight, sin embargo, no creo que sea particularmente importante.Estrangulamiento/colas de eventos - ¿Extensiones reactivas?
Considérese una clase con tres propiedades:
- Propiedad1
- Propiedad2
- Propiedad3
Cada vez que una de estas propiedades se actualiza, una actualización es necesario.
private void Refresh()
{
//Call out to the server, do something when it comes back
}
Mis objetivos son los siguientes:
- Si una actualización está en curso, que idealmente debería cancelar la llamada al servidor, y emitir una nueva solicitud
- Si se cambia una propiedad, deberíamos dejar una pequeña ventana de tiempo (quizás 0.1 segundos) donde esperamos cambios adicionales. De esta forma, si se cambian rápidamente varias propiedades (por ejemplo, mediante programación), no enviamos spam al servidor con solicitudes. Está bien que se restablezca esa ventana de 0.1 segundos en cada cambio, pero no es obligatorio.
Si es importante, estoy utilizando una implementación de ChannelFactory para la llamada al servidor.
¿Qué tipo de patrones puedo usar para lograr esto? ¿Esto es algo con lo que las extensiones reactivas pueden ayudarme?
Editar:
Marcado respuesta de Pablo como correcta. Si bien ReactiveUI no funciona actualmente en contra de silverlight5, describe claramente los pasos de aproximación/composición para resolver el problema utilizando Rx.
Rx definitivamente apoya esto, ver http://rxwiki.wikidot.com/101samples#toc29 - sobre la cancelación de ella - echar un vistazo a CancellationToken de Tareas –