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?
c#
.net
system.reactive
Keith Hill
quelle
quelle
Antworten:
Eine Reihe guter Beispiele finden Sie im Wiki 101 Rx Samples
quelle
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 ?"
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle