GoDev

Blog programisty.

Programowanie Reaktywne - Kombinatorzy - Combine Latest.


Artykuł ten jest częścią serii artykułów na temat Programowania reaktywnego.

Zapraszam na GitHub-a.

Tematy

  1. Wstęp
  2. Zabawa z czasem - Timer
  3. Kto za tym stoi? - Scheduler
  4. Nie zapominaj - Subscribe
  5. Zabawa z czasem - Interval
  6. Zabawa z czasem - Buffer
  7. Zabawa z czasem - Delay
  8. Zabawa z czasem - Sample
  9. Zabawa z czasem - Throttle
  10. Zabawa z czasem - Timestamp/TimeInterval
  11. Tworzymy dane - Generators
  12. Tworzymy dane - Własna klasa publikująca
  13. Marudzimy - Skip
  14. Marudzimy - Take
  15. Łap To! - ConsoleKey
  16. Kombinatorzy - Concat
  17. Kombinatorzy - Repeat
  18. Kombinatorzy - Start With
  19. Kombinatorzy - Ambiguous
  20. Kombinatorzy - Merge
  21. Kombinatorzy - Zip
  22. Kombinatorzy - Switch
  23. Kombinatorzy - When-And-Then
  24. Kombinatorzy - Combine Latest
  25. Transformers - Select
  26. Transformers - OfType and Cast
  27. Transformers - Metadata
  28. Bileciki do kontroli - Unit Tests of Interval
  29. Bileciki do kontroli - Unit Tests of Observer Interval
  30. Bileciki do kontroli - Unit Tests of Create Cold/Hot Observable
  31. Szpryca - AutoFac

Wstęp

Reactive Extensions - Combine Latest Tak to już koniec tej mini serii o kombinatorach. Wyszło dziewięć postów. Całkiem sporo.

Wszystkie kody oczywiście znajdują się na GitHub-ie. Myślę, że w ten sposób łatwiej będzie zrozumieć działanie Rx-ów. Uruchomić i analizować co tam się ciekawego dzieje. A jeszcze lepiej poeksperymentować.

Observable.CombineLatest

Dziwny ten kombinator, jak już zostanie odblokowany przez otrzymanie przynajmniej po jednej porcji danych od głównych źródełek. To wówczas już publikuje w raz z taktem najszybszego dystrybutora. Jak nie ma od innych danych. To powiela ostatnią porcyjkę.

Reactive Extensions - Combine Latest

Bazując na przykładzie dotyczącym When-And-Then powstał poniższy kodzik. Dzięki użyciu strumienia ConsoleKey nic się ciekawego nie dzieje puki nie wciśniemy różnego od Enter klawisza na klawiaturze.

Wduszenie spowoduje odblokowanie i popłynie strumień danych.

Łącznikiem wszystkich nadrzędnych źródełek jest tutaj CombineLatest. Można mu podać wiele strumieni w parametrach. Jednak trzeba pamiętać, że ilość parametrów powinna być odzwierciedlona w takiej samej ilości także parametrów w lambdzie znajdującej się na końcu użycia CombineLatest.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var observableStream1 = GeneratorFactory.CreateGenerator(0, 100, 1, 500);
var observableStream2 = GeneratorFactory.CreateGenerator(1000, 1100, 1, 2000);
var observableStream3 = GeneratorFactory.CreateGenerator(10000, 11000, 1, 250);
var observableProvider = new ObservableProvider();

observableProvider.ConsoleKey.BreakWhenKey(ConsoleKey.Enter);

var combineLatestStream = observableStream1.CombineLatest(
  observableStream2,
  observableStream3,
  observableProvider.ConsoleKey,
  (a, b, c, d) => new
  {
    A = a,
    B = b,
    C = c,
    D = d.Key
  });

var combineLatestSubscribent = combineLatestStream.DefaultPrint("CombineLatest");

Wykorzystujemy dane od wszystkich strumieni i tworzymy nowy obiekt.

Znaczy to tyle, że raz odblokowany strumień, płynie już nieustannie powielając mniej aktualne dane.

Wszyscy maszerują razem…

Zakończenie

Kończąc przygodę z kombinowaniem zastanawiam się jaką tematykę podjąć dalej. Jeszcze wcale nie było słowa na temat przechwytywania zdarzeń. Zastępując tym samym użycie +/-= new EventHandler….

Ale o tym głębiej będę się zastanawiał jutro. Dzisiaj dziękuję za poświęcony czas.

Kod z Wami!


Jest to post wchodzący w skład podjętego wyzwania ogłoszonego przez MIROBURN we vlogu z dnia 3 lutego 2018 roku.

Celem wyzwania jest systematyczne działanie w ciągu 30 dni.

Postanowiłem pisać post dziennie o tematyce Programowania Reaktywnego dla platformy .NET.

Wszelkie źródła związane z postami znajdują się na repozytorium GitHub.

Stan obecny wyzwania: 30 z 30 dni.


Referencje:


Wcześniejszy: Programowanie Reaktywne - Kombinatorzy - When-And-Then

Następny: Programowanie Reaktywne - Transformers - Select