Pregunta

¿Qué es LINQ to events a.k.a RX Framework , también conocido como Reactive Extensions en .NET 4.0 (pero también disponible como versiones retroportadas)?

En otras palabras, ¿para qué sirven todas las cosas en System.Reactive.dll?

¿Fue útil?

Solución

El equipo .NET Rx (este no es un nombre oficial) descubrió que cualquier secuencia de inserción (eventos, devoluciones de llamada) se puede ver como una secuencia de extracción (como lo hacemos normalmente al acceder a los enumerables) también, o son de naturaleza Dual . En resumen, el patrón observador / observable es el doble del patrón de enumeración.

Entonces, ¿qué tiene de bueno esta dualidad?

Cualquier cosa que hagas con secuencias Pull (leer codificación de estilo declarativo) también se aplica a las secuencias push. Aquí hay algunos aspectos. Puede crear Observables a partir de eventos existentes y luego usarlos como ciudadanos de primera clase en .NET, es decir, puede crear un observable a partir de un evento y exponer lo mismo como una propiedad.

Como IObservable es el dual matemático de IEnumerable, .NET Rx facilita LINQ sobre secuencias de inserción como Eventos, al igual que LINQ sobre IEnumerables

Ofrece una mayor libertad para componer nuevos eventos: puede crear eventos específicos a partir de eventos generales.

.NET Rx presenta dos interfaces, IObservable e IObserver que "ofrece una alternativa al uso de adaptadores de entrada y salida como productor y consumidor de fuentes de eventos y sumideros". y esto pronto se convertirá en el hecho de escribir código asincrónico de manera declarativa. Aquí hay un ejemplo rápido.

//Create an observable for MouseLeftButtonDown

var mouseLeftDown=Observable.FromEvent<MouseButtonEventArgs>  
        (mycontrol,"MouseLeftButtonDown");  

//Query the above observable just to select the points
var points = from ev in mouseEvents  
                 select ev.EventArgs.GetPosition(this);  

//Show points in the window's title, when ever user
//presses the left button of the mouse
points.Subscribe(p => this.Title = "Location ="  
                                        + p.X + "," + p.Y);

También puedes pasar por estas publicaciones para obtener la cabeza y la cola en detalle. También eche un vistazo al código fuente relacionado también.

Consulte este conjunto de artículos

Otros consejos

Puedes leer más sobre esto aquí: http://themechanicalbride.blogspot.com/2009/07 /introducing-rx-linq-to-events.html

Mi primera exposición fue en este blog, ya que estoy leyendo su libro en F #: http://tomasp.net/articles/reactive-ii-csevents.aspx

Básicamente, entiendo que cuando escribe un controlador de eventos para movimientos del mouse, por ejemplo, es posible que desee capturar continuamente estos eventos y tal vez pueda contar cuántos movimientos o clics, pero, básicamente, desea usar esa información en más formas que solo como un controlador de eventos. Por lo tanto, solo trate los eventos como una transmisión continua.

Además, mira este video del Canal 9: Experto a experto: Brian Beckman y Erik Meijer - Dentro del .NET Reactive Framework (Rx)

De la descripción del espectáculo:

  

.NET Reactive Framework (Rx) es el dual matemático de LINQ para   Objetos. Consiste en un par de   interfaces IObserver / IObservable que   representar push-based u observable,   colecciones, más una biblioteca de   métodos de extensión que implementan el   Operadores de consultas estándar de LINQ y   otra transformación de flujo útil   funciones.

Creo que la esencia del RX es cambiar el ángulo con el que miramos la información. Naturalmente, cada pieza de información es el resultado de algún proceso, que tiene lugar en el continuo espacio-tiempo. El enfoque tradicional funciona con la proyección del proceso al plano de tiempo " actual " , perdiendo los detalles de la dimensión de tiempo como resultado.

RX funciona con la proyección a alguna otra dimensión, capturando también el componente de tiempo, por lo que no es de extrañar que LINQ to RX sea un superconjunto del LINQ normal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top