Gute Einführung in das .NET Reactive Framework [geschlossen]

218

Gibt es neben der Microsoft-Dokumentation eine gute Einführung und ein Tutorial zum Microsoft Reactive (Rx) -Framework?

Was ist ein gutes Beispiel (mit Code), das Reactive für ein Programmierproblem erleichtert, dessen Lösung mit herkömmlichen asynchronen Codierungstechniken schwierig ist?

LBushkin
quelle
Ich suche weiter - ich muss viele Beispiele sehen, bevor ich eine gute Idee habe, wofür es am besten verwendet wird.
Sam Harwell
4
Ich habe eine kleine Demo der Live-Bing-Suche in WPF mit Rx erstellt: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea
5
Ich beantworte genau diese Frage in einer Reihe von Beiträgen in meinem Blog: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

Antworten:

97

UPDATE : Die folgenden Blog-Beiträge wurden von meinem Online-Buch www.IntroToRx.com ersetzt . Es ist ein umfassendes Buch mit 19 Kapiteln, das kostenlos erhältlich ist. Sie können es im Internet durchsuchen oder die Mobi-Version für Ihr Kindle herunterladen. Gegen eine geringe Gebühr (~ 99c / 77p) erhalten Sie es auch direkt bei Amazon. Wenn das Buch nicht Ihren Bedürfnissen oder Erwartungen entspricht, lassen Sie es mich (den Autor) wissen und wir werden es für v2 besser machen.

Danke für den Link zum Hot / Cold Post. Dies ist nur ein Teil der gesamten Serie ,

  1. Einführung in Rx
  2. Statische und Erweiterungsmethoden
  3. Lebenslange Verwaltung - Abschließen und Abbestellen
  4. Ablaufsteuerung
  5. Kombinieren mehrerer IObservable-Streams
  6. Scheduling und Threading
  7. Heiße und kalte Observablen
  8. Rx testen
  9. Puffer, Fenster, Join und Gruppen-Join

Ich werde diesen Blog weiterhin mit weiteren Rx-Einführungsmaterialien aktualisieren.

Für fortgeschrittenere Sachen gehen Sie zum Rx Forum (MSDN).

Lee Campbell
quelle
7
Ich habe meine Füße geschleppt, um etwas über Rx zu lernen, weil alle Lernmaterialien in Form von Videos vorliegen. +1 für die Bereitstellung dieser textbasierten Ressource.
Daniel Schilling
Zählen Sie auf, dass dieser Link tot ist.
Maslow
2
Es lebe Aufzählen Sie diesen Link
Vollzeit-Skelett
1
Ich arbeite mit James (EnumerateThis) und er hat es seit Jahren nicht mehr angefasst. Er scheint nicht die Zeit oder den Appetit zu haben, es wiederzubeleben
Lee Campbell
85

Hier ist eine Wiki-Site mit vielen Codebeispielen, die zeigen, wie verschiedene Funktionen des .NET Rx-Frameworks verwendet werden: http://rxwiki.wikidot.com/101samples

Ich fand, dass dies die umfassendste Website ist, mit der man am schnellsten anfangen kann.

LBushkin
quelle
12
Soweit ich das beurteilen kann, sagt Ihnen dieses Wiki nicht einmal, welche Referenz Sie aufnehmen sollen. Welches ist eher ... frustrierend.
George Mauer
umm füge einfach die DLLs hinzu und öffne den Objekt-Explorer und suche nach der Klasse. Natürlich hilft auch das Kontextmenü mit der rechten Maustaste in Visual Studio
Joe
62

MSDN Site für Rx-Framework

Für einen Entwickler, der tiefer geht, der Quellcode

Coole österreichische Keynote über Rx

Dies ist das Beste, was ich je gesehen habe: DevCamp 2010 Keynote - Rx: Heilen Sie Ihren asynchronen Programmier-Blues

Einige interessante Videos auf Kanal 9

Kim Hamilton und Wes Dyer: In .NET Rx und IObservable / IObserver in der BCL (VS 2010)

Ein Interview mit dem Schöpfer von Rx: Experte zu Experte: Brian Beckman und Erik Meijer - Innerhalb des .NET Reactive Framework (Rx)

Eine Einführung vom Schöpfer von Rx

Ein Codeprojekt- Artikel

Ein weiterer Kurs erster Blog mit Links (neu)

Sommer
quelle
5
+1 Ich kann diese Videos nur wärmstens empfehlen. Ich habe viel gelernt. Schauen Sie sich auch einige von Bart De Smets Videos zu IQueryable und IQbservable an. Sie erhalten ein besseres Verständnis für die Innenseiten von Rx.
Gideon
1
Das komplette Beispielprojekt für das "DevCamp 2010 Keynote" -Video finden Sie hier: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv
16

Hier ist ein Beispiel für etwas, das mit reaktiver Programmierung einfach zu tun ist, aber bei klassischen Ereignissen chaotisch (wenn nicht herausfordernd) ist. Es zeichnet Linien, während die Maustaste gedrückt ist. Es ist lesbar, es gibt keine explizite Statusbehandlung:

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

(Ich muss gestehen, dass Pairwise () in diesem Beispiel aus eigenem Anbau stammt ...)

Das Wichtigste an IObservable ist, dass es genau wie IEnumerable "zusammensetzbar" ist.

Ich kann das in einer anderen Antwort erwähnte Video nur empfehlen. Tatsächlich gibt es auf Channel9 verschiedene Videos zu diesem Thema:

Benjol
quelle
Woher kommt. Bis ich komme, kann ich es nie benutzen, ich muss eine Referenz
vermissen
1
@ TimothyP, ich denke, es könnte ein Rückfall auf eine ältere Version sein. Das oder ich habe selbst eines geschrieben (ich habe damals mit der Implementierung von IObservable-Erweiterungsmethoden gespielt). Soweit ich sehen kann, hat die neueste Version von reaktiven Erweiterungen eine Methode namens TakeUntil, die gut passt.
Benjol
Dies ist ein großartiges Beispiel, das den Geist von Rx zeigt. Vielen Dank.
Dan Abramov
Können Sie die Implementierung von Pairwise () teilen?
Blaster
1
@blaster, wie wäre es mit dieser Implementierung : var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor
4

Seltsamerweise verweist die Homepage von Reactive Extensions auf ein Dutzend Videos und Blogs, vergisst jedoch, auf die umfassende offizielle Referenzdokumentation zu verlinken. Das ist eine Schande, wenn Sie das Team kennen, bitten Sie sie, ihre Website zu reparieren!

Oberst Panik
quelle
3

Spielen Sie mit Rx Sandbox , um eine sehr intuitive Ansicht der verschiedenen Kombinatoren zu erhalten. Dies ist das beste Lernwerkzeug, das ich je gesehen habe.

Omer Raviv
quelle
2

Gehen Sie diese Artikel durch und laden Sie insbesondere den zugehörigen Quellcode herunter und spielen Sie damit.

Vertraue darauf, dass dies helfen wird

amazedsaint
quelle
2

Um die zweite Frage zu beantworten, hier ist ein Problem, das von Rx sehr profitieren kann. Es heißt "schnell reich werden".

Sie haben ein gleichnamiges Spiel entwickelt, das sich ziemlich gut verkauft. Es ist jedoch nur in Ihren Filialen für den Großhandel erhältlich. Um die Bargeldverarbeitung zu vereinfachen, haben Sie ein Förderband, das zu Ihnen fließt.

(Bitte zögern Sie nicht, die obige Geschichte zu ändern :))

Verkäufer legen gebundene Geldbündel darauf, ohne dass Etiketten den Betrag und die Art der Rechnungen im Bündel angeben. Ihre Aufgabe ist es, das Geld zu sortieren und zu zählen. Wenn Sie später mehr Geld bekommen, können Sie andere einstellen, die Ihnen helfen.

In diesem Fall ist die Quelle eine asynchrone Quelle für Geldbündel (Produzent). Ihre Mitarbeiter und Lieferanten erwarten Geld, aber Sie müssen die Wads verbrauchen, auspacken und Ihre benutzerdefinierte Geschäftslogik verwenden, um sie entsprechend neu zu verpacken und zu bezahlen.

Die Verkäufer laufen auf ihrem eigenen Faden, damit sie nicht darauf warten müssen, dass Sie zählen, was sie auf den Gürtel werfen. Ihre Zeit wird am besten genutzt, wenn Sie erfahren, wann mehr Geld zum Zählen verfügbar ist. Bis dahin können Sie andere Arbeiten ausführen.

Sie können jedes Wad durch ein Byte [] darstellen.

Dies ist eine ziemlich häufige Situation in der realen Welt. Wenn Sie eine Ressource (z. B. Webseiten für Suchmaschinen, Bilder oder Videos) in einem Netzwerk oder Daten von Peripheriegeräten abrufen, erhalten Sie diese in Byte-Blöcken (möglicherweise mit Headern). In einem einzelnen Thread oder in einer Umgebung mit mehreren Threads, mit der es zu schwierig ist, zu arbeiten, neigen Sie dazu, sie zu aggregieren und zu verarbeiten. Nicht länger!!

Performance
quelle
Dies sind nur einige Hersteller (Verkäufer), die OnNext auf demselben IObserver <T> aufrufen und dann den Verbraucher abonnieren, aber sicherstellen, dass es auf einem anderen Thread beobachtet, als es produziert wird (OnNext).
Lee Campbell
1

Zusätzlich zu Andreas Hoffmanns Links (fand sie sehr hilfreich, als ich Rx lernte)

Hier sind einige von Bart De Smet (ein SEHR kluger Typ, der die Dinge wirklich gut erklärt) Videos:

Ein bisschen ein Durchlauf von Rx:
Rx - Curing your Asynchronous Programming Blues

Einige blutige Innenseiten + einige Philosophie, diese Videos sind wirklich aufschlussreich:
Min LINQ - Die Essenz von LINQ
(Das obige Video befasst sich damit, wie LINQ irgendwie mit anderen Dingen zusammenhängt, wie Rx)

Beobachtungen zu IQbservable - Das Dual von IQueryable

Gideon
quelle