RxSharp
A .NET port of RxJS — same operators, same semantics, same names you already know, in idiomatic C#.
Quick Start
dotnet add package ReactiveExtensionsSharp
var clicks = Observable.FromEvent<EventArgs>(h => button.Click += h, h => button.Click -= h);
Observable.Interval(TimeSpan.FromSeconds(1))
.Map(x => x * x)
.Filter(x => x % 2 == 0)
.TakeUntil(clicks)
.Subscribe(x => Console.WriteLine(x));