2013-04-09 9 views
6

Zastanawiam się nad wprowadzeniem Rx do mojego miejsca pracy, ale im więcej się o tym dowiaduję, tym bardziej uważam, że tak naprawdę nie daje to przewagi.Gdzie należy użyć Rx?

Mamy wiele aplikacji serwerowych, które pobierają dane wejściowe na jednym końcu i wyprowadzają je na drugim końcu. Co jest idealne dla modelu aktora i "nieskończonej" gwintowania skalowalności, do tej pory używałem ConcurrentQueues do implementacji przekazywania komunikatów i myślałem, że Rx może być dobrą, bardziej funkcjonalną alternatywą, która może sprawić, że współbieżność będzie bardziej niejawna, co pomoże mi przesunąć część decyzje dotyczące przepływu danych z imperatywnego kodu do deklaracji obserwowalnych.

Ale czytając o tym i próbując go, nie widzę dużej przewagi nad używaniem zwykłych starych wątków z ConcurrentQueues do przekazywania wiadomości. Jakie korzyści daje mi Rx? Zawsze mówi się, że nawet .NET 4.5 powodował, że wiele przestarzałych Rx (choć asynchronicznych i Dataflow) nadal nadaje się do obsługi strumieni zdarzeń. Jakie przypadki przedstawiają strumienie zdarzeń i jak je identyfikować?

+0

Można znaleźć zastosowanie Netflix za RX woth patrząc, wygląda na to, że działa dobrze dla nich https://blogs.msdn.com/b/interoperability/archive/2013/02/05/netflix-solving-big-problems-with-reactive-extensions-rx.aspx – Wilka

+0

Jako (bardzo szorstka) zasada, jeśli masz do czynienia z pojedynczymi wartościami, użyj aplacji TPL/Task; jeśli masz do czynienia z sekwencjami "zdarzeń" (rodzajowe "coś", a nie tylko zdarzenia .net), użyj rx. Przepływ danych Jestem mniej znany, musiałbym o tym pomyśleć. – JerKimball

Odpowiedz

4

Jeśli chcesz zrównoleglić niektóre zadania, użyj TPL.

Jeśli potrzebujesz wykonać operacje asynchroniczne, użyj Task & async/await.

Jeśli potrzebujesz odbierać, filtrować i łączyć strumienie zdarzeń, użyj Rx. Zauważ, że Rx niekoniecznie jest asynchroniczny - jest to po prostu model do obsługi strumieni zdarzeń w taki sam sposób, w jaki LINQ jest modelem do obsługi kolekcji.

Twój przypadek użycia brzmi jak pierwsza opcja.

1

Jest wiele podobnych pytań na SO ....

Rx wszystko jest kompozycja o matematycznie na podstawie operacji asynchronicznych. TPL i "regularne stare wątki" nie są kompozycyjne. Musisz zobaczyć nietrywialne przykłady, zanim zobaczysz, skąd ta kompozycja naprawdę przynosi ci korzyści.

Spójrz na tej stronie Intro do Rx (i reszta z nim), i jestem pewien, że zaczynają grok powody RX: http://introtorx.com/Content/v1.0.10621.0/01_WhyRx.html#WhyRx

+0

Dobry link, warty przeczytania, jeśli nie jesteś pewien "celu" Rx – AlexFoxGill