Rozumiem podstawy Rx. Tam, gdzie walczę, czy faktycznie użyłbyś tego poza akademickimi przykładami? Jakie są typowe, proste scenariusze ze świata rzeczywistego, w których Rx jest znacznie lepszym rozwiązaniem niż to, które mamy dzisiaj w .NET?
Rozumiem podstawy Rx. Tam, gdzie walczę, czy faktycznie użyłbyś tego poza akademickimi przykładami? Jakie są typowe, proste scenariusze ze świata rzeczywistego, w których Rx jest znacznie lepszym rozwiązaniem niż to, które mamy dzisiaj w .NET?
Odpowiedzi:
Kilka dobrych przykładów znajduje się na wiki 101 Rx Samples
Rx umożliwia pisanie kodu, który organizuje współbieżne zdarzenia razem. Jeśli kiedykolwiek korzystałeś z TPL (tj. Task), a następnie musiałeś wykonywać zawiłe backflipy, aby spróbować ContinueWith lub WaitAll we właściwych rzeczach, Rx jest dla Ciebie.
Na przykład przepływ pracy „Dla każdego elementu w tej tablicy wywołaj usługę internetową, a gdy wszystkie te żądania wrócą, zrób coś innego. Jeśli którykolwiek z nich zawiedzie, zawiodą całość”.
Ujawnienie, bezwstydna wtyczka naprzód: książka, którą Jesse Liberty i ja napisaliśmy o Rx, została zaprojektowana w celu rozwiązania dokładnie tego pytania: „Jak używać Rx w mojej codziennej pracy?”; „Co mogę z tym zrobić ?”
Przede wszystkim IObservable to wydarzenie . Tak więc wszędzie tam, gdzie używasz zdarzeń wewnętrznie, możesz użyć IObservable - a jeśli później będziesz musiał zastosować LINQ do tego zdarzenia, możesz to zrobić bez refaktoryzacji.
Po drugie, RX nadaje się do każdej sytuacji, w której musisz uruchomić kod asynchronicznie . Na przykład wywołanie usługi internetowej lub załadowanie dużego obrazu.
Ale kiedy naprawdę zacznie świecić - jeśli Twój program osiągnie jakąś „masę krytyczną” użycia IObservable i zaczniesz łączyć różne obserwowalne, zdziwisz się, jak łatwe stają się niektóre zadania.
W obu przypadkach standardowym sposobem otrzymywania danych są teraz zdarzenia, ale jeśli chcę, aby składnia lub kompozycja zapytania była zgodna z wymaganiami, to RX daje mi je tam, gdzie zdarzenia nie.
Rx jest bardzo ogólny, więc ma nieograniczoną użyteczność, tak jak IEnumerable / IEnumerator ma nieograniczoną użyteczność. IE pobiera wartości, IO wypycha wartości.
Foreach to konkretny przykład, w którym IEnumerables przydają się, ale to nie wyjaśnia IEnumerable, yield ani nic. To samo dotyczy Rx.
Możliwość spojrzenia na coś z punktu widzenia ciągnięcia lub punktu widzenia oraz możliwość kontrolowania kierunku lub środków jest bardzo potężna, ponieważ teraz możesz dowolnie przesuwać i ciągnąć obliczenia, używając zapytania LINQ operatory „za darmo” w stosunku do IO, ponieważ jest to matematyczna dualność IE.
Właśnie rzuciłem okiem na Rx, ale jednym z zabawnych projektów, do których go wykorzystam, jest utworzenie widżetu Silverlight, który wyświetla aktywność w naszej aplikacji internetowej ASP.NET MVC (jakie metody akcji zostały wywołane, przez którego użytkownika itp.) . Wygląda na to, że Rx może pomóc w wielu rzeczach w tym projekcie, takich jak zarządzanie współbieżnością i Throttling.