Gutes Beispiel für die Verwendung von reaktiven Erweiterungen [geschlossen]


79

Ich verstehe die Grundlagen von Rx. Ich habe Probleme damit, wie Sie dies tatsächlich über akademische Beispiele hinaus nutzen würden. Was sind einige gängige, einfache reale Szenarien, in denen Rx eine viel bessere Lösung ist als das, was wir heute in .NET haben?


3
Ich habe eine Demo der Bing-Suche in WPF mit Rx geschrieben: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea

2
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

1
Bitte schauen Sie unter github.com/AdaptiveConsulting/ReactiveTraderCloud nach . Ich denke, das ist ein gutes Beispiel, weil sie viel Reactive Extension für ihre Probe verwendet haben. Prost!
Thangchung

Antworten:


41

Eine Reihe guter Beispiele finden Sie im Wiki 101 Rx Samples


13
Danke für den Link. Es gibt dort einige ziemlich gute Proben. Ich sehe diesen Head Slapper immer noch nicht ganz - "Oh, das ist das kanonische Problem, das dadurch gelöst wird". Andererseits könnte ich nur langsam bei der Aufnahme sein.
Keith Hill

9
Hem ... trotz seiner hohen Punktzahl bleibt diese Antwort "nur Link". Könnten Sie es vielleicht ein bisschen ausarbeiten?
Jub0bs

sind sie nicht akademisch ?
Lei Yang

28

Mit Rx können Sie Code schreiben, der gleichzeitige Ereignisse zusammen orchestriert. Wenn Sie jemals die TPL (dh Task) verwendet haben und dann komplizierte Backflips ausführen mussten, um zu versuchen, mit ContinueWith oder WaitAll die richtigen Dinge zu tun, ist Rx genau das Richtige für Sie.

Beispiel: Der Workflow "Rufen Sie für jedes Element in diesem Array einen Webdienst auf und führen Sie nach dem Zurückkommen aller dieser Anforderungen etwas anderes aus. Wenn eine dieser Anforderungen fehlschlägt, schlagen Sie das Ganze fehl".

Offenlegung, schamloser Stecker voraus: Das Buch, das Jesse Liberty und ich über Rx geschrieben haben, wurde entwickelt, um genau diese Frage zu lösen: "Wie verwende ich Rx in meiner täglichen Arbeit?"; "Was kann ich damit machen ?"


Dies machte nur klar, dass ich Rx brauche oder will
frostymarvelous

25

Zunächst einmal ist IObservable eine Veranstaltung . Überall dort, wo Sie Ereignisse intern verwenden, können Sie IObservable verwenden. Wenn Sie später LINQ auf dieses Ereignis anwenden müssen, können Sie dies ohne Refactoring tun.

Zweitens ist RX für jede Situation geeignet, in der Sie Ihren Code asynchron ausführen müssen . Zum Beispiel einen Webdienst aufrufen oder ein großes Bild laden.

Aber wenn es wirklich zu leuchten beginnt - wenn Ihr Programm eine "kritische Masse" der IObservable-Nutzung erreicht und Sie verschiedene Observables kombinieren, werden Sie erstaunt sein, wie einfach einige Aufgaben werden.


5
  • Gerätemessungen
  • Daten, die über einen Nachrichtenbus eingehen

In beiden Fällen erfolgt der Empfang der Daten standardmäßig über Ereignisse. Wenn ich jedoch eine Abfragesyntax oder -zusammensetzung möchte, gibt RX diese an mich weiter, wo Ereignisse dies nicht tun.


2

Rx ist sehr allgemein und hat daher einen unbegrenzten Nutzen, genau wie IEnumerable / IEnumerator einen unbegrenzten Nutzen hat. IE zieht Werte, IO schiebt Werte.

Foreach ist ein konkretes Beispiel dafür, wo IEnumerables nützlich sind, aber das erklärt IEnumerable, Yield oder irgendetwas nicht. Gleiches gilt für Rx.

Es ist sehr leistungsfähig, etwas entweder von einem Pull-Standpunkt oder von einem Push-Standpunkt aus betrachten zu können und die Richtung oder Mittel steuern zu können, da Sie jetzt mithilfe der LINQ-Abfrage Berechnungen nach Belieben verschieben und ziehen können Operatoren kostenlos "gegen eine E / A, weil es das mathematische Dual von IE ist.


0

Ich habe gerade meinen ersten Blick auf Rx geworfen, aber ein lustiges Projekt, für das ich es verwenden werde, ist das Erstellen eines Silverlight-Widgets, das Aktivitäten in unserer ASP.NET MVC-Webanwendung anzeigt (welche Aktionsmethoden von welchem ​​Benutzer aufgerufen wurden usw.) . Es scheint, dass Rx bei vielen Dingen in diesem Projekt helfen kann, wie zum Beispiel bei der Parallelitätsverwaltung und beim Drosseln.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.