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.