Dobre wprowadzenie do .NET Reactive Framework [zamknięte]

218

Czy oprócz dokumentacji Microsoft jest dobre wprowadzenie i samouczek na temat struktury Microsoft Reactive (Rx)?

A także, jaki jest dobry przykład (z kodem), że Reactive ułatwia problem programistyczny, który jest trudny do rozwiązania przy użyciu konwencjonalnych technik kodowania asynchronicznego?

LBushkin
źródło
Wciąż szukam - zanim będę miał dobry pomysł, do czego najlepiej go używać, muszę zobaczyć wiele przykładów.
Sam Harwell,
4
Zbudowałem małe demo wyszukiwania na żywo Bing w WPF z Rx: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea
5
Odpowiadam dokładnie na to pytanie w serii postów na moim blogu: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

Odpowiedzi:

97

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

Dzięki za link do postu Hot / Cold. To tylko jedna część pełnej serii ,

  1. Wprowadzenie do Rx
  2. Metody statyczne i rozszerzenia
  3. Lifetime management - Wypełnianie i anulowanie subskrypcji
  4. Kontrola przepływu
  5. Łączenie wielu strumieni IObservable
  6. Planowanie i wątki
  7. Obserwowalne na gorąco i na zimno
  8. Testowanie Rx
  9. Buffer, Window, Join i Group Join

Będę nadal aktualizować tego bloga, wprowadzając więcej elementów wprowadzających do Rx.

Bardziej zaawansowane rzeczy znajdziesz na Forum Rx (MSDN).

Lee Campbell
źródło
7
Wlokłem się, żeby dowiedzieć się o Rx, ponieważ wszystkie materiały do ​​nauki są w formie filmów. +1 za udostępnienie tego zasobu tekstowego.
Daniel Schilling
Wylicz, że ten link jest martwy.
Masłów
2
Niech żyje Wymień ten link
Pełny czas Skeleton
1
Pracuję z Jamesem (EnumerateThis), a on po prostu nie dotykał tego od lat. Wydaje się, że nie ma czasu ani apetytu, aby go ożywić
Lee Campbell,
85

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

Okazało się, że jest to najbardziej wszechstronna witryna, z której najszybciej zacząć.

LBushkin
źródło
12
O ile mogę powiedzieć, ta wiki nie tyle mówi, które odniesienie należy uwzględnić. Co jest raczej ... frustrujące.
George Mauer,
umm, po prostu dodaj biblioteki dll i otwórz eksplorator obiektów i wyszukaj klasę. oczywiście pomaga także menu kontekstowe prawego przycisku myszy w programie Visual Studio
Joe
62

Witryna MSDN dla Rx-Framework

Dla programistów sięgających głębiej kod źródłowy

Fajna austriacka wypowiedź na temat Rx

To jest najlepsze, co widziałem: Keynote DevCamp 2010 - Rx: Leczenie asynchronicznego programowania bluesa

Kilka interesujących filmów na kanale 9

Kim Hamilton i Wes Dyer: Inside .NET Rx i IObservable / IObserver w BCL (VS 2010)

Wywiad z twórcą z Rx: Expert to Expert: Brian Beckman i Erik Meijer - Inside .NET Reactive Framework (Rx)

Wprowadzenie od twórcy Rx

Artykuł dotyczący projektu kodowego

Kolejny oczywiście pierwszy blog z linkami (nowy)

Czas letni
źródło
5
+1 Gorąco polecam te filmy, nauczyłem się dużo, a także sprawdź niektóre filmy Bart De Smet na IQueryable i IQbservable. Lepiej rozumiesz wnętrze Rx.
gideon
1
Kompletny przykładowy projekt filmu „DevCamp 2010 keynote” znajduje się tutaj: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv
16

Oto przykład czegoś, co łatwo zrobić z programowaniem reaktywnym, ale bałagan (jeśli nie wyzwanie) z klasycznymi zdarzeniami, rysuje linie, gdy przycisk myszy jest wciśnięty. 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ę wyznać, że w tym przykładzie Pairwise () jest domową hodowlą ...)

Najważniejszą rzeczą w IObservable jest to, że można go „komponować”, podobnie jak IEnumerable.

Całkowicie polecam film wymieniony w innej odpowiedzi. W rzeczywistości na Channel9 jest kilka różnych filmów na ten temat:

Benjol
źródło
Skąd pochodzi. Do czasu, nigdy nie mogę go użyć, muszę brakować referencji
TimothyP,
1
@TimothyP, myślę, że może to być powrót do starszej wersji. To lub ja sam napisałem jedną z nich (wtedy bawiłem się implementacją metod rozszerzenia IObservable). Z tego, co widzę, najnowsza wersja rozszerzeń reaktywnych ma metodę o nazwie TakeUntil, która wygląda na dobre dopasowanie.
Benjol,
To niesamowity przykład, który pokazuje ducha Rx. Dzięki.
Dan Abramov
Czy możesz udostępnić implementację Pairwise ()?
Blaster
1
@blaster, jak o tej realizacji: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor
4

Co dziwne, strona główna Reactive Extensions prowadzi do kilkunastu filmów i blogów, ale zapomina o linkach do obszernej oficjalnej dokumentacji referencyjnej. Szkoda, jeśli znasz zespół, poproś go o naprawienie strony!

Pułkownik Panika
źródło
3

Graj z Rx Sandbox, aby uzyskać bardzo intuicyjny wgląd w to, co oznaczają różne kombinatory. To najlepsze narzędzie do nauki, jakie widziałem.

Omer Raviv
źródło
2

Aby odpowiedzieć na drugie pytanie, oto problem, który może wiele skorzystać z Rx. To się nazywa „Szybko się wzbogacić”.

Opracowałeś grę o tej samej nazwie i sprzedaje się całkiem nieźle. Ale jest dostępny tylko w hurtowniach w twoich sklepach. Aby ułatwić przetwarzanie gotówki, masz przenośnik taśmowy, który płynie w twoją stronę.

(Prosimy zmienić powyższą historię :))

Sprzedawcy umieszczają na niej oprawione zwitki gotówki bez etykiet wskazujących kwotę i rodzaj rachunków na zwitku. Twoim zadaniem jest sortowanie i liczenie pieniędzy. Później, kiedy 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 zwitków gotówki (Producent). Twoi pracownicy i dostawcy oczekują pieniędzy, ale musisz spożywać wady, rozpakowywać je i używać niestandardowej logiki biznesowej, aby odpowiednio zapakować, aby je zapłacić.

Sprzedawcy biegają według własnego wątku, aby nie musieli czekać, aż policzysz, co rzucisz na pasek. Twój czas jest najlepiej wykorzystany, jeśli powiesz, kiedy jest więcej pieniędzy do policzenia, do tego czasu możesz wykonać inną pracę.

Możesz przedstawić każdą wadę bajtem [].

Jest to dość powszechna sytuacja w świecie rzeczywistym; gdy pobierasz dowolny zasób [na przykład strony internetowe dla wyszukiwarek, obrazy lub filmy] w sieci lub dane z urządzeń peryferyjnych, otrzymujesz je w kawałkach bajtów (być może z nagłówkami). W pojedynczym wątku lub w środowisku wielowątkowym, z którym zbyt trudno jest pracować, masz tendencję do ich agregowania i przetwarzania. Nigdy więcej!!

Występ
źródło
to tylko niektórzy producenci (sprzedawcy) dzwoniący OnNext na tym samym serwerze IObserver <T>, a następnie konsument subskrybujący, ale upewniający się, że obserwuje to w innym wątku niż ten, w którym jest produkowany (OnNext).
Lee Campbell
1

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

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

Niby przegląd Rx:
Rx - Leczenie asynchronicznego programowania bluesa

Niektóre krwawe wnętrze + filozofia, te filmy są naprawdę pouczające:
Min LINQ - esencja LINQ
(powyższe wideo dotyczy tego, w jaki sposób LINQ odnosi się do innych rzeczy, takich jak Rx)

Obserwacje dotyczące IQbservable - dualność IQueryable

gideon
źródło