Dobre wprowadzenie do the.NET Reactive Framework [zamknięty]

Poza dokumentacją Microsoftu, czy istnieje dobre wprowadzenie i samouczek do frameworka Microsoft Reactive (RX)?

Jaki jest również dobry przykład (z kodem), który Reactive ułatwia rozwiązywanie problemu programowania, który jest trudny do rozwiązania przy użyciu konwencjonalnych technik kodowania asynchronicznego?

Author: Mogsdad, 2009-10-20

16 answers

UPDATE: poniższe wpisy na blogu zostały zastąpione przez moją książkę online www.IntroToRx.com . jest to obszerna książka 19 rozdziałów dostępna za darmo. Możesz go przeglądać w Internecie lub pobrać wersję mobi dla swojego kindle. Możesz również uzyskać go bezpośrednio z Amazon za niewielką opłatą (~99c / 77p). Jeśli książka nie spełnia Twoich potrzeb lub oczekiwań, daj mi (autorowi) znać, a zrobimy to lepiej dla v2.

Dzięki za link do gorącego / zimnego posta. To tylko jedna część z pełnej serii ,

  1. Wprowadzenie do Rx
  2. metody statyczne i rozszerzające
  3. Lifetime management-uzupełnianie i rezygnacja z subskrypcji
  4. Kontrola przepływu
  5. łączenie wielu strumieni IObservable
  6. planowanie i gwintowanie
  7. gorące i zimne obserwatory
  8. Testowanie Rx
  9. Buffer, Window, Join i Group Join

Będę aktualizować tego bloga o więcej wprowadzających rzeczy RX.

Więcej zaawansowane rzeczy chcesz przejść do RX Forum (MSDN).

 84
Author: Lee Campbell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-24 08:11:09

Oto strona wiki z wieloma przykładami kodu demonstrującymi, jak korzystać z różnych funkcji. NET RX framework: http://rxwiki.wikidot.com/101samples

Uznałem, że jest to najbardziej kompleksowa strona i najszybsza do rozpoczęcia.

 82
Author: LBushkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-13 15:20:08
 58
Author: Summer-Time,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 13:12:35

Oto przykład czegoś, co jest łatwe do zrobienia z programowaniem reaktywnym, ale bałagan (jeśli nie wyzwanie) z klasycznymi zdarzeniami, rysuje linie, gdy przycisk myszy jest wyłączony. Jest czytelny, nie ma jawnej obsługi stanu:

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(muszę przyznać, że w tym przykładzie para () jest rodzima...)

Najważniejszą rzeczą w IObservable jest to, że jest "komponowalny", tak jak IEnumerable.

Szczerze polecam filmik wspomniany w kolejna odpowiedź. W rzeczywistości istnieje kilka różnych filmów na ten temat na Channel9:
 16
Author: Benjol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-17 14:26:27

Po przejściu przez niektóre podstawowe rzeczy, w tym HandsOnLab upewnij się, że sprawdzisz Hot and Cold Observables Lee Campbella, który zabrał mi część tajemniczej tajemnicy z Rx:)

 12
Author: sweetlilmre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-15 11:17:15

Ta seria artykułów (jest ich cztery) o reaktywnym LINQ może okazać się przydatna: Programowanie reaktywne (II.) - wprowadzenie reaktywnego LINQ.

On ma przykład pisania gry za jego pomocą, więc miejmy nadzieję, że to powinno być to, czego szukasz.

 4
Author: James Black,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-02 08:48:06

Znalazłem również wprowadzenie ram reaktywnych Cz. I na CodeBetter.com. Na tej samej stronie znajduje się sequel pierwszej części.

Mam nadzieję, że to ci pomoże.
 4
Author: FrenchData,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-02 08:49:02

O dziwo, Reactive Extensions homepage linkuje do kilkunastu filmów i blogów, ale zapomina o linkowaniu do obszernej oficjalnej dokumentacji referencyjnej. Szkoda, jeśli znasz zespół, poproś go o naprawienie swojej strony!

 4
Author: Colonel Panic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 10:21:34

Zagraj z RX Sandbox , aby uzyskać bardzo intuicyjny obraz tego, co oznaczają różne kombinatory. To najlepsze narzędzie do nauki, jakie widziałem.

 3
Author: Omer Raviv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-21 11:33:12

Przejrzyj te artykuły, a w szczególności Pobierz powiązany kod źródłowy i baw się nim.

Trust this will help

 2
Author: amazedsaint,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-18 14:40:10

Aby odpowiedzieć na drugie pytanie, oto problem, który może wiele korzyści z Rx. Nazywa się "Get rich quick".

Stworzyłeś grę o tej samej nazwie i sprzedaje się całkiem nieźle. Ale jest on dostępny tylko w sklepach hurtowych. Aby ułatwić przetwarzanie gotówki, masz przenośnik taśmowy, który płynie w twoim kierunku.

(zapraszam do zmiany powyższej historii:))

Sprzedający umieszczają na nim zapas gotówki bez etykiet wskazujących kwotę i rodzaj rachunków w wad. Twoim zadaniem jest sortowanie i liczenie pieniędzy. Później, gdy zdobędziesz więcej pieniędzy, możesz zatrudnić innych, którzy ci pomogą.

W tym przypadku źródłem jest asynchroniczne źródło wad gotówki (Producent). Twoi pracownicy i dostawcy oczekują pieniędzy, ale musisz spożywać wad, rozpakować je i użyć niestandardowej logiki biznesowej, aby przepakować odpowiednio, aby zapłacić.

Sprzedawcy działają na własnym wątku, dzięki czemu nie muszą czekać na Ciebie policz, co rzucają na pas. Twój czas jest najlepiej wykorzystany, jeśli powiedziano ci, kiedy więcej pieniędzy jest dostępnych do policzenia, do tego czasu możesz wykonywać inną pracę.

Każdy wad można reprezentować bajtem [].

Jest to dość powszechna sytuacja w świecie rzeczywistym; gdy odzyskujesz dowolny zasób [na przykład strony internetowe dla wyszukiwarek, obrazy lub filmy] w sieci lub dane z urządzeń peryferyjnych, dostajesz je w kawałkach bajtów (prawdopodobnie z nagłówkami). W jednym wątku, lub w wielu wątku środowisko, które jest zbyt trudne do pracy, masz tendencję do agregowania i przetwarzania ich. Już nie!!

 2
Author: Performance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-02 09:08:43

Jesse Liberty ma książkę wydaną w październiku 2011:

Amazon.com: Programming Reactive Extensions and LINQ

A na Channel9 są filmiki z RxWorkshop:

Channel9: RxWorkshop

 2
Author: Shane Castle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-06 05:33:43

Czy klauzula "wyłączanie dokumentacji Microsoft" dotyczy Filmów na kanale 9?

Od twórcy reactive framework Erika Meijera: - ekspert do eksperta: Brian Beckman i Erik Meijer-wewnątrz. NET Reactive Framework (Rx)

Brand new: pierwsze kroki z rozszerzeniami Rx dla. Net

 1
Author: Matt Breckon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-17 22:02:17

Oprócz linków Andreasa Hoffmanna (uważałem je za bardzo pomocne, gdy uczyłem się Rx)

Oto niektóre z Bart De Smet (bardzo mądry facet, który wyjaśnia rzeczy naprawdę dobrze) filmy:

Trochę przejechane przez Rx:
Rx-Utwardzanie programowania asynchronicznego

Trochę krwawych wnętrzności + trochę filozofii, te filmiki są naprawdę pouczające:
Min LINQ-esencja LINQ
(Powyższy filmik dotyczy tego, jak LINQ ma się do innych rzeczy, np. Rx)

Obserwacje na temat Iqbservable-Dual of IQueryable

 1
Author: gideon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 16:49:40

DEVHOL202-Utwardzanie asynchronicznego bluesa za pomocą rozszerzeń Reactive dla. NET (PDF, 2 MB) jest najlepszym laboratorium / tutorial widziałem do tej pory. Prowadzi cię przez podstawy biblioteki, dzięki czemu możesz budować i projektować na tym, czego się nauczyłeś.

Istnieje również wersja JavaScript. Szukaj w Google dla "Reactive Extensions Hands on Lab".

 1
Author: John C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-02 09:04:00

I liked Wprowadzenie do Rx Cz. 1-typy kluczy, i pokazał najważniejsze cechy.

 0
Author: vidalsasoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-02 09:16:06