Bonne introduction au .NET Reactive Framework [fermé]

218

Mis à part la documentation Microsoft, existe-t-il une bonne introduction et un bon tutoriel sur le framework Microsoft Reactive (Rx)?

De plus, quel est un bon exemple (avec du code) que Reactive facilite un problème de programmation difficile à résoudre en utilisant des techniques de codage asynchrones conventionnelles?

LBushkin
la source
Je continue de chercher - j'aurai besoin de voir beaucoup d'exemples avant d'avoir une bonne idée de son utilisation optimale.
Sam Harwell
4
J'ai construit une petite démo de recherche Bing en direct dans WPF avec Rx: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea
5
Je réponds exactement à cette question dans une série d'articles sur mon blog: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

Réponses:

97

MISE À JOUR : Les articles de blog ci-dessous ont été remplacés par mon livre en ligne www.IntroToRx.com . Il s'agit d'un livre complet de 19 chapitres disponible gratuitement. Vous pouvez le parcourir sur le Web ou télécharger la version mobi pour votre Kindle. Vous pouvez également l'obtenir directement d'Amazon pour une somme modique (~ 99c / 77p). Si le livre ne répond pas à vos besoins ou attentes, faites-le moi savoir (l'auteur) et nous ferons mieux pour la v2.

Merci pour le lien vers le post Hot / Cold. Ce n'est qu'une partie de la série complète ,

  1. Introduction à Rx
  2. Méthodes statiques et d'extension
  3. Gestion à vie - Fin et désabonnement
  4. Contrôle de flux
  5. Combinaison de plusieurs flux IObservable
  6. Planification et threading
  7. Observables chauds et froids
  8. Test de Rx
  9. Buffer, Window, Join et Group Join

Je continuerai à mettre à jour ce blog avec plus de choses d'introduction Rx.

Pour des informations plus avancées, vous souhaitez vous rendre sur le Forum Rx (MSDN).

Lee Campbell
la source
7
J'ai traîné mes pieds en apprenant sur Rx parce que tous les supports d'apprentissage sont sous forme de vidéos. +1 pour avoir fourni cette ressource textuelle.
Daniel Schilling
Énumérer ce lien est mort.
Maslow
2
Vive l'énumération de ce lien
Squelette à temps plein
1
Je travaille avec James (EnumerateThis) et il n'a tout simplement pas touché depuis des années. Il ne semble pas avoir le temps ni l'appétit pour le faire revivre
Lee Campbell
85

Voici un site wiki avec de nombreux exemples de code montrant comment utiliser différentes fonctionnalités du framework .NET Rx: http://rxwiki.wikidot.com/101samples

J'ai trouvé que c'était le site le plus complet et le plus rapide pour commencer.

LBushkin
la source
12
Pour autant que je sache, ce wiki ne vous dit pas quelle référence inclure. Ce qui est plutôt ... frustrant.
George Mauer
umm il suffit d'ajouter les DLL et d'ouvrir l'explorateur d'objets et de rechercher la classe. bien sûr, le menu contextuel du clic droit dans Visual studio aide aussi
Joe
62

Site MSDN pour Rx-Framework

Pour un développeur qui approfondit, le code source

Cool keynote autrichien sur Rx

C'est le meilleur que j'ai vu: DevCamp 2010 Keynote - Rx: Guérir vos blues de programmation asynchrones

Quelques vidéos intéressantes sur Channel 9

Kim Hamilton et Wes Dyer: dans .NET Rx et IObservable / IObserver dans la BCL (VS 2010)

Entretien avec le créateur de Rx: Expert to Expert: Brian Beckman et Erik Meijer - Inside the .NET Reactive Framework (Rx)

Une introduction du créateur de Rx

Un projet de code article de projet de

Un autre cours premier blog avec liens (nouveau)

Heure d'été
la source
5
+1 Je recommande vivement ces vidéos, j'ai beaucoup appris, consultez également certaines des vidéos de Bart De Smet sur IQueryable et IQbservable, vous obtenez une meilleure compréhension de l'intérieur de Rx.
gideon
1
Le projet d'exemples complet pour la vidéo "DevCamp 2010 keynote" est ici: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv
16

Voici un exemple de quelque chose de facile à faire avec une programmation réactive, mais désordonné (sinon difficile) avec des événements classiques, il trace des lignes lorsque le bouton de la souris est enfoncé. Il est lisible, il n'y a pas de gestion d'état explicite:

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(Je dois avouer que dans cet exemple, Pairwise () est fait maison ...)

La chose la plus importante à propos d'IObservable est qu'il est «composable», tout comme IEnumerable.

Je recommande vivement la vidéo mentionnée dans une autre réponse. En fait, il existe plusieurs vidéos différentes sur le sujet sur Channel9:

Benjol
la source
D'où vient jusqu'à ce que je ne puisse jamais l'utiliser, je dois manquer une référence
TimothyP
1
@ TimothyP, je pense que cela pourrait être un retour à une ancienne version. Cela ou j'en ai écrit un moi-même (je jouais avec l'implémentation de méthodes d'extension IObservable à l'époque). D'après ce que je peux voir, la dernière version des extensions réactives a une méthode appelée TakeUntil, qui ressemble à un bon ajustement.
Benjol
Ceci est un exemple génial qui montre l'esprit de Rx. Merci.
Dan Abramov
Pouvez-vous partager l'implémentation de Pairwise ()?
blaster
1
@blaster, que diriez - vous de cette mise en œuvre: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor
4

Bizarrement, les extensions réactives page d'accueil de contient des liens vers une douzaine de vidéos et de blogs, mais oublie de créer un lien vers la documentation de référence officielle complète. C'est vraiment dommage, si vous connaissez l'équipe, demandez-leur de réparer leur site web!

Colonel Panic
la source
3

Jouez avec Rx Sandbox pour obtenir une vue très intuitive de la signification des différents combinateurs. Ceci est le meilleur outil d'apprentissage que j'ai vu.

Omer Raviv
la source
2

Parcourez ces articles, et en particulier, téléchargez le code source associé et jouez avec.

Faites confiance, cela vous aidera

amazedsaint
la source
2

Pour répondre à la deuxième question, voici un problème qui peut bénéficier beaucoup de Rx. Cela s'appelle "Devenez riche rapidement".

Vous avez développé un jeu du même nom et il se vend plutôt bien. Mais il n'est disponible que dans vos magasins en gros. Pour faciliter le traitement des espèces, vous disposez d'un tapis roulant qui coule vers vous.

(N'hésitez pas à changer l'histoire ci-dessus :))

Les vendeurs y placent des liasses de billets liées sans aucune étiquette indiquant le montant et le type de factures dans la liasse. Votre travail consiste à trier et à compter l'argent. Plus tard, lorsque vous obtenez plus d'argent, vous pouvez en embaucher d'autres pour vous aider.

Dans ce cas, la source est une source asynchrone de liasses de billets (producteur). Vos employés et fournisseurs attendent de l'argent, mais vous devez consommer les liasses, les déballer et utiliser votre logique métier personnalisée pour reconditionner de manière appropriée pour les payer.

Les vendeurs courent sur leur propre fil, afin qu'ils n'aient pas à attendre que vous comptiez ce qu'ils jettent à la ceinture. Votre temps est mieux utilisé si l'on vous dit quand plus d'argent est disponible pour compter, d'ici là, vous pouvez faire d'autres travaux.

Vous pouvez représenter chaque liasse par un octet [].

Il s'agit d'une situation réelle assez courante; lorsque vous récupérez une ressource [par exemple, des pages Web pour les moteurs de recherche, des images ou des vidéos] sur un réseau ou des données de périphériques, vous les obtenez en morceaux d'octets (éventuellement avec des en-têtes). Dans un seul thread ou dans un environnement multi-thread trop difficile à travailler, vous avez tendance à les regrouper et à les traiter. Plus maintenant!!

Performance
la source
il s'agit simplement de certains producteurs (vendeurs) appelant OnNext sur le même IObserver <T>, puis le consommateur s'abonnant, mais s'assurant qu'il observe sur un fil différent de l'endroit où il est produit (OnNext).
Lee Campbell
1

En plus des liens d'Andreas Hoffmann (les ont trouvés très utiles lorsque j'apprenais le Rx)

Voici quelques vidéos de Bart De Smet (un gars TRÈS intelligent qui explique très bien les choses):

Un peu à travers Rx:
Rx - Guérir vos blues de programmation asynchrones

Quelques intérieurs sanglants + une certaine philosophie, ces vidéos sont vraiment instructives:
Min LINQ - L'essence de LINQ
(La vidéo ci-dessus traite de la façon dont LINQ se rapporte à d'autres choses, comme Rx)

Observations sur IQbservable - Le Dual d'IQueryable

gideon
la source