Reactive Extensions (Rx) For Event-based Programming
Reactive Extensions moves from a pull-model to a push-model, where instead of having a collection that implements an IEnumerable, you have an IObservable that you subscribe to. Your delegate is then called whenever an event is dispatched by your source. But it's not only that. You can make use of many Linq operators to make your code much simpler.
I'd recommend that you watch the videos on the following page:
Out of these videos, do the workshops and try the challenges. Since they are not ordered on the page above, let me list them in order here:
Finally, another good link is this page with tens of Rx samples: