Entiendo los conceptos básicos de Rx. Lo que estoy luchando es cómo usarías esto más allá de los ejemplos académicos. ¿Cuáles son algunos escenarios comunes y simples del mundo real en los que Rx es una solución mucho mejor que la que tenemos hoy en .NET?
c#
.net
system.reactive
Keith Hill
fuente
fuente
Respuestas:
Para ver un montón de buenos ejemplos, consulte el wiki de 101 Rx Samples
fuente
Rx le permite escribir código que orquesta eventos concurrentes juntos. Si alguna vez usó el TPL (es decir, Tarea), luego tuvo que hacer volteretas hacia atrás complicadas para intentar Continuar con o Esperar todo en las cosas correctas, Rx es para usted.
Por ejemplo, el flujo de trabajo de "Para cada elemento de esta matriz, llame a un servicio web y, cuando todas esas solicitudes regresen, haga otra cosa. Si alguna de ellas falla, fallará toda".
Divulgación, avance descarado: el libro que Jesse Liberty y yo escribimos sobre Rx fue diseñado para resolver exactamente esta pregunta, "¿Cómo utilizo Rx en mi trabajo diario?"; "¿Qué puedo hacer con esto?"
fuente
En primer lugar, IObservable es un evento . Entonces, en cualquier lugar donde use eventos internamente, puede usar IObservable, y si luego necesita aplicar LINQ a este evento, puede hacerlo sin refactorizar.
En segundo lugar, RX se adapta a cualquier situación en la que necesite ejecutar su código de forma asincrónica . Por ejemplo, llamar a un servicio web o cargar una imagen grande.
Pero cuando realmente comienza a brillar, si su programa alcanza una "masa crítica" de uso de IObservable y comienza a combinar diferentes observables, se sorprenderá de lo fáciles que se vuelven algunas tareas.
fuente
En ambos casos, ahora, la forma estándar de recibir los datos es a través de eventos, pero si quiero la sintaxis de la consulta o la composición, RX me la da donde los eventos no lo hacen.
fuente
Rx es muy general, por lo que tiene una utilidad ilimitada, al igual que IEnumerable / IEnumerator tiene una utilidad ilimitada. IE extrae valores, IO empuja valores.
Foreach es un ejemplo concreto de dónde los IEnumerables son útiles, pero eso no explica IEnumerable, ni el rendimiento ni nada. Lo mismo ocurre con Rx.
Ser capaz de mirar algo desde un punto de vista de extracción o un punto de vista de empuje, y poder controlar la dirección o los medios, es muy poderoso, porque ahora puede empujar y tirar cálculos a voluntad, utilizando la consulta LINQ operadores "gratis", contra un IO, porque es el dual matemático de IE.
fuente
Acabo de ver por primera vez Rx, pero un proyecto divertido para el que lo usaré es crear un widget de Silverlight que muestre la actividad en nuestra aplicación web ASP.NET MVC (qué métodos de acción fueron llamados, qué usuario, etc.) . Parece que Rx puede ayudar con muchas cosas en este proyecto, como la administración de concurrencia y el Throttling.
fuente