Reactive Extensions und LINQ

Asynchrone und ereignisbasierte Verarbeitung

Die Reactive Extensions (Rx) sind eine Bibliothek für die Verarbeitung asynchroner und ereignisbasierter Informationen durch Beobachtung einer Datenquelle bezüglich eingehender oder sich ändernder Informationen. Welche Ausgabe sollte die Anwendung in Bezug auf die Eingabe erzeugen und wie kann diese Relation verständlich in Code beschrieben werden? Als Lösung gibt es LINQ, eine beschreibende und ausdrucksstarke Spracherweiterung, die Eingaben mithilfe von Transformationsoperationen effektiv und verständlich in Ergebnisse überführt. Standard-LINQ-Operatoren arbeiten ausschließlich auf statischen, nicht aber auf eingehenden oder sich ändernden Daten. Hier zeigen die Reactive Extensions ihre Stärke.

Einstieg in LINQ und Rx

  • Die .NET yield State Machine und der Enumerator als read-only forward Cursor
  • Events, Callbacks, Delegaten, anonyme Methoden und Lambda Expressions
  • Konzeptionelle Dualität – Push gegenüber Pull – Enumerable / Enumerator gegenüber Observable / Observer
  • ObservableCollections gegenüber IObservable
  • Visualisierung mit Marble-Diagrammen
  • LINQ to Everything mit IObservable<T> und IQbservable<T>
  • Abgrenzung zur Task Parallel Library und Dataflow

Funktionale Programmierung

  • Goods und Bads – Bedeutung der verzögerten Ausführung, Seiteneffekte und Monaden in Bezug zum LINQ-Programmiermodell
  • Funktionale Patterns wie Closure, Partial Application Function, Continuations und Pattern Matching, Currying, Memorization
  • Hilfreiche Monaden wie Unit, Identity und Maybe

LINQ

  • Die Generator-Operatoren Range und Empty
  • Map / Reduce und die Core Query-Operatoren Aggregate, SelectMany, GroupBy, OrderBy
  • Einsatz der Interactive Extensions (Ix) (Generate, Repeat, Do, ForEach, Catch, Memorize, Defer, Retry, Buffer, Concat, Scan)
  • Massendatenverarbeitung mit Parallel LINQ
  • Eigene LINQ-Erweiterungen
  • Expression Trees, IQueryable<T> und QueryableProvider

Rx Grundlagen

  • Generator- und Query-Operatoren (Generate, Create, Select, SelectMany, Group, Join, Zip, Amb)
  • Event Stream OnNext / OnComplete / OnError
  • Multiplexer / Demultiplexer mit Subjects
  • Testen von asynchronen Operationen mit virtueller Zeit
  • Bridge-Operatoren (ToAsync, FromEvent, FromAsyncPattern, ToEvent, Notifications)
  • Time-based-Operatoren (Window, Buffer, Timestamp, OnNextAt, Delay, Throttle)
  • Asynchrone Operatoren (ToAsync, Start, Finally)
  • Event Stream Join-Pattern (When, And, Then)
  • Threading und Schedulers
  • Unsubscribe mit Disposables und Cancellations
  • Seiteneffektfreie Verarbeitung (Do, Materialize, Dematerialize)
  • Hot und Cold Observables (Publish, Multicast)
  • Eigene Rx-Erweiterungen

Rx in der Praxis

  • Komplexe Web Service-Verarbeitung
  • Bidirektionale Anwendungskommunikation mittels Aktoren
  • Message / Event Bus und Message / Event Processing
  • Komplexe UI-Interaktionen („Drag and Drop“, Multi-Touch)
  • Verarbeitung von Sensorik- und Messdaten
  • Generatoren und Simulatoren
  • Asynchrone Massendatenverarbeitung (ETL, File Streams, Message Streams)

Rx für JavaScript (RxJs)

Reactive XAML – ReactiveUI

  • MVVM mit Rx
  • ViewModel als ReactiveObject
  • Reactive Commands und Async Reactive Commands
  • Observables zu Properties
  • Materialisierung und Caching
  • Web Services mit ReactiveUI

Parallele Programmierung mit Rx

Asynchrone Datenquellen und deren Verarbeitung sind und werden vermehrt die Kernthemen der kommenden Jahre sein. Damit wird eine effektive Nutzung weiter steigender horizontaler Skalierung von Rechnersystemen (Cloud) sowie Rechenleistung (Cores per CPU) möglich.

Die Programmierung von asynchronen, Multithreading-basierten Anwendungen ist eine besondere, nicht triviale Aufgabe. Events, Threads und Sperr-Variablen sind das Handwerkszeug. Jedoch nehmen der Entwicklungsaufwand und die Komplexität zu. Ziel muss demzufolge sein, asynchrones Verhalten moderner Anwendungen gezielt mit den deterministischen Konzepten aus der traditionellen imperativen Programmierung umzusetzen.

Unsere Veranstaltungsorte von dieser / diesem Schulung, Training, Seminar, Kurs (nach oben): Berlin, Dresden, Frankfurt am Main, Hamburg, Hannover, Karlsruhe, Köln, Leipzig, Magdeburg, München, Stuttgart und Inhouse.

Fortbildung oder Weiterbildung zu Rx – wir setzen nur auf erfahrene Talente als Rx Trainer. Das Credo von Mike Bild lautet „Stück für Stück zu etwas Großem. Das ist für mich emergentes Design“. Mehr zu ihm und den Beweggründen unserer anderen Trainer erfahren Sie bei seiner Biographie (direkt erreichbar per Bild).

Nach oben