Lesson 28 of 40 Advanced C# Expert 50 min

Reactive Programming with Rx.NET

Model asynchronous event streams with Reactive Extensions (Rx.NET) — observables, operators, schedulers, and real-world use cases.

Part 1: Observables and Observers

// Create observable from events
var mouseClicks = Observable
  .FromEventPattern<MouseEventArgs>(window, "MouseClick")
  .Select(e => e.EventArgs.GetPosition(null));

mouseClicks.Subscribe(
  pos => Console.WriteLine($"Click at {pos}"),
  ex => Console.WriteLine("Error: " + ex.Message),
  () => Console.WriteLine("Completed"));

Part 2: Key Operators

OperatorDescription
WhereFilter elements
SelectTransform elements
Throttle/DebounceRate limiting
BufferGroup into windows
Merge/Zip/CombineLatestCombine streams
Retry/CatchError handling

Part 3: Real-time Search with Debounce

searchBox.TextChanged
  .Select(_ => searchBox.Text)
  .DistinctUntilChanged()
  .Throttle(TimeSpan.FromMilliseconds(300))
  .SelectMany(term => SearchApiAsync(term))
  .ObserveOn(DispatcherScheduler.Current)
  .Subscribe(UpdateResults);

Part 4: Schedulers for Threading

  • Scheduler.CurrentThread — current thread
  • Scheduler.ThreadPool — thread pool
  • DispatcherScheduler.Current — UI thread (WPF/MAUI)
  • TaskPoolScheduler.Default — Task pool
  • NewThreadScheduler.Default — dedicated thread per subscription
VISUAL STUDIO 2026 MADE EASY
Recommended Book

VISUAL STUDIO 2026 MADE EASY

Build real applications with C#, VB.NET, Python, JavaScript, C++, and .NET 10. A practical companion for mastering Visual Studio 2026 step by step.