tutorial query examples español ejemplos linq events system.reactive reactive-programming

query - ¿Qué es LINQ para eventos también conocido como RX Framework?



linq select (4)

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

En otras palabras, ¿para qué sirve todo el contenido de System.Reactive.dll?


Además, vea 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:

El .NET Reactive Framework (Rx) es el doble matemático de LINQ to Objects. Consiste en un par de interfaces IObserver / IObservable que representan colecciones basadas en push u observables, además de una biblioteca de métodos de extensión que implementan LINQ Standard Query Operators y otras funciones útiles de transformación de flujo.


Creo que la esencia del RX está cambiando 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 trabaja con la proyección en alguna otra dimensión, capturando el componente de tiempo también, por lo que no es de extrañar que LINQ to RX sea un superconjunto del LINQ regular.


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

Entonces, ¿qué tiene de bueno esta dualidad?

Todo lo que hagas con las secuencias Pull (lee la codificación del 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 que una propiedad.

Como IObservable es el doble matemático de IEnumerable, .NET Rx facilita LINQ sobre secuencias de inserción como Eventos, muy parecido a LINQ sobre IEnumerables

Le da 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 "proporcionan una alternativa al uso de adaptadores de entrada y salida como productor y consumidor de fuentes y sumideros de eventos", y esto pronto se convertirá en el hecho de escribir código asíncrono 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 puede revisar estos mensajes para obtener detalles sobre la cabeza y la cola. También eche un vistazo al código fuente de las relaciones también.

Mira este conjunto de artículos


Puede 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, mi comprensión de esto es que, cuando se escribe un controlador de eventos para los movimientos del mouse, por ejemplo, es posible que desee capturar estos eventos de forma continua y, quizás, poder contar cuántos movimientos o clics, pero, básicamente, desea usarlos. 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.