Phase 11 of 30 · Topic 11.5

Reactive Extensions (System.Reactive / Rx.NET) & Observables

1Concept

Rx.NET treats events as asynchronous data streams (`IObservable<T>` / `IObserver<T>`), enabling powerful LINQ transformations over time (`Throttle`, `Debounce`, `Buffer`, `Merge`).

2Architecture Diagram

Event Stream ──> Throttle(300ms) ──> DistinctUntilChanged() ──> Subscribe(SearchApi)
(Eliminates duplicate keystroke searches in UI/APIs!)

3Code Example

C# 13 & .NET 9
using System;

// Conceptual Observable Pattern Demonstration
public class StreamObserver<T> : IObserver<T>
{
    public void OnNext(T value) => Console.WriteLine($"Stream Event: {value}");
    public void OnError(Exception error) => Console.WriteLine($"Stream Error: {error.Message}");
    public void OnCompleted() => Console.WriteLine("Stream Closed.");
}

public class RxPatternDemo
{
    public static void Main()
    {
        var observer = new StreamObserver<string>();
        observer.OnNext("Key: 'A'");
        observer.OnNext("Key: 'AS'");
        observer.OnNext("Key: 'ASP'");
        observer.OnCompleted();
    }
}

4Expected Output

Stream Event: Key: 'A'
Stream Event: Key: 'AS'
Stream Event: Key: 'ASP'
Stream Closed.

5Key Takeaways

  • `IObservable<T>` is the mathematical dual of `IEnumerable<T>` (Push vs Pull).
  • Essential for streaming financial ticker feeds and real-time telemetry.
  • Unsubscribing is handled automatically via `IDisposable` return tokens.