Question

Qu'est-ce que LINQ pour les événements a.k.a RX Framework , autrement dit les extensions réactives de .NET 4.0 (mais également disponible en versions rétroportées)?

En d'autres termes, à quoi servent tous les éléments de System.Reactive.dll?

Était-ce utile?

La solution

L'équipe .NET Rx (ce n'est pas un nom officiel) a constaté que toute séquence de push (événements, rappels) pouvait également être vue comme une séquence de pull (comme nous le faisons normalement lors de l'accès à des enumerables) & # 8211; ou ils sont doubles dans la nature. En bref, le modèle observateur / observable est le double du modèle de dénombrement.

Alors, qu'est-ce qui est cool dans cette dualité?

Tout ce que vous faites avec les séquences Pull (lire le codage de style déclaratif) est également applicable aux séquences Push. Voici quelques aspects. Vous pouvez créer des observables à partir d’événements existants, puis les utiliser comme citoyens de première classe dans .NET & # 8211; c'est-à-dire que vous pouvez créer un observable à partir d'un événement et l'exposer comme une propriété.

IObservable étant le dual mathématique de IEnumerable, .NET Rx facilite les séquences LINQ au-dessus des séquences push comme les événements, un peu comme LINQ sur IEnumerables

Cela donne une plus grande liberté pour composer de nouveaux événements & # 8211; vous pouvez créer des événements spécifiques à partir d'événements généraux.

.NET Rx introduit deux interfaces, IObservable et IObserver, qui "offrent une alternative à l’utilisation des adaptateurs d’entrée et de sortie en tant que producteur et consommateur de sources et de puits d’événements". et cela deviendra bientôt de facto l’écriture de code asynchrone de manière déclarative. Voici un exemple rapide.

//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);

Vous pouvez également passer par ces messages pour obtenir la tête et la queue en détail. Consultez également le code source associé.

Découvrez cet ensemble d'articles

Autres conseils

Vous pouvez en savoir plus à ce sujet ici: http://themechanicalbride.blogspot.com/2009/07 /introducing-rx-linq-to-events.html

Ma première exposition a été sur ce blog, alors que je lis son livre sur F #: http://tomasp.net/articles/reactive-ii-csevents.aspx

En fait, si je comprends bien, lorsque vous écrivez un gestionnaire d’événements pour les mouvements de la souris, par exemple, vous pouvez capturer en continu ces événements et peut-être compter le nombre de mouvements ou de clics, mais vous souhaitez d'utiliser cette information à plus d'un titre que comme un gestionnaire d'événements. Il suffit donc de traiter les événements comme un flux continu.

Découvrez également cette vidéo du canal 9: Expert à expert: Brian Beckman et Erik Meijer - À l'intérieur du .NET Reactive Framework (Rx)

D'après la description de l'émission:

  

Le .NET Reactive Framework (Rx) est le dual mathématique de LINQ pour   Objets. Il consiste en une paire de   interfaces IObserver / IObservable qui   représenter basé sur push, ou observable,   collections, plus une bibliothèque de   méthodes d'extension qui implémentent la   Opérateurs de requête standard LINQ et   autre transformation utile du flux   fonctions.

Je pense que l'essence du RX est de changer l'angle avec lequel nous examinons les informations. Naturellement, chaque information est le résultat d'un processus, qui se déroule dans le continuum espace-temps. L’approche traditionnelle fonctionne avec la projection du processus sur le plan temporel "actuel" / , en perdant les détails de la dimension temporelle.

RX utilise la projection dans une autre dimension, en capturant également le composant temps. Il n’est donc pas étonnant que LINQ to RX soit un sur-ensemble du LINQ classique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top