2013-04-09 16 views
6

Ich denke daran, Rx an meinen Arbeitsplatz zu bringen, aber je mehr ich darüber lerne, desto mehr glaube ich, dass es dir keinen Vorteil bringt.Wo sollte Rx verwendet werden?

Wir haben viele Server-Apps, die Eingabedaten an einem Ende nehmen und am anderen Ende ausgeben. Das ist perfekt für das Actor-Modell und die "unendliche" Threading-Skalierbarkeit. Bis jetzt habe ich ConcurrentQueues verwendet, um Message-Passing zu implementieren, und ich dachte, dass Rx eine funktionellere Alternative sein könnte, die Concurrency impliziter machen könnte Datenfluss-Entscheidungen von Imperativ-Code zu den Observablen-Erklärungen.

Aber lesen darüber und es zu versuchen, sehe ich nicht viel Vorteil gegenüber der Verwendung von regulären alten Threads mit ConcurrentQueues für die Weitergabe von Nachrichten. Welche Vorteile bringt mir Rx? Es wird immer gesagt, dass obwohl .NET 4.5 viele Rx veraltete (obwohl async und Dataflow), es immer noch gut für die Behandlung von Ereignisströmen ist. In welchen Fällen treten Ereignisströme auf und wie identifiziere ich sie?

+0

Sie könnten Netflix Verwendung von Rx Woth finden Betrachten Sie, es scheint für sie gut funktioniert https://blogs.msdn.com/b/interoperability/archive/2013/02/05/netflix-solving-big-problems-with-reactive-extensions-rx.aspx – Wilka

+0

Als (sehr grobe) Faustregel gilt, wenn Sie mit einzelnen Werten arbeiten, verwenden Sie die TPL/Task API; Wenn es sich um Sequenzen von "Ereignissen" handelt (generische "etwas", nicht nur .net-Ereignisse), verwenden Sie rx. Datenfluss, mit dem ich weniger vertraut bin, darüber müsste ich nachdenken. – JerKimball

Antwort

4

Wenn Sie einige Aufgaben parallelisieren müssen, verwenden Sie TPL. Wenn Sie asynchrone Operationen durchführen müssen, verwenden Sie Task & async/await.

Wenn Sie Streams von Ereignissen empfangen, filtern und kombinieren müssen, verwenden Sie Rx. Beachten Sie, dass Rx nicht unbedingt asynchron ist - es ist einfach ein Modell für den Umgang mit Ereignisströmen auf die gleiche Weise, wie LINQ ein Modell für den Umgang mit Sammlungen ist.

Ihr Anwendungsfall klingt wie die erste Option.

1

Es gibt viele ähnliche Fragen auf SO ....

Rx dreht sich alles um mathematisch basierende Zusammensetzung von asynchronen Operationen. TPL und "normale alte Threads" sind nicht kompositorisch. Sie müssen nicht-triviale Beispiele sehen, bevor Sie sehen können, wo die Zusammensetzung Ihnen wirklich nutzt.

Schauen Sie sich auf dieser Seite des Intro zu Rx (und den Rest davon), und ich bin sicher, dass Sie die Gründe für Rx zu grok beginnen: http://introtorx.com/Content/v1.0.10621.0/01_WhyRx.html#WhyRx

+0

Guter Link, lesenswert, wenn Sie sich nicht sicher sind, welchen Zweck Rx hat – AlexFoxGill

Verwandte Themen