Je comprends les bases de Rx. Là où je me bats, c'est comment vous utiliseriez cela au-delà des exemples académiques? Quels sont les scénarios courants et simples du monde réel où Rx est une bien meilleure solution que ce que nous avons aujourd'hui dans .NET?
Pour un tas de bons exemples, voir le wiki 101 Rx Samples
Rx vous permet d'écrire du code qui orchestre ensemble des événements simultanés. Si vous avez déjà utilisé le TPL (c'est-à-dire la tâche), puis avez dû faire des backflips alambiqués pour essayer de continuer avec ou attendre tout sur les bonnes choses, Rx est pour vous.
Par exemple, le flux de travail "Pour chaque élément de ce tableau, appelez un service Web et lorsque toutes ces demandes reviennent, faites autre chose. Si l'une d'entre elles échoue, échouez à l'ensemble".
Disclosure, Shameless plug ahead: Le livre que Jesse Liberty et moi avons écrit sur Rx a été conçu pour résoudre exactement cette question, "Comment utiliser Rx dans mon travail quotidien?"; "Que puis-je faire avec ça?"
Tout d'abord, IObservable est un événement. Donc, partout où vous utilisez des événements en interne, vous pouvez utiliser IObservable - et si vous devez ultérieurement appliquer LINQ à cet événement, vous pouvez le faire sans refactorisation.
Deuxièmement, RX est adapté à toutes les situations où vous devez exécuter votre code de manière asynchrone. Par exemple, appeler un service Web ou charger une grande image.
Mais quand il commence vraiment à briller - si votre programme atteint une "masse critique" d'utilisation IObservable et que vous commencez combinant différents observables, vous seriez étonné de voir comment facile certaines tâches deviennent.
Dans les deux cas maintenant, la façon standard de recevoir les données est via les événements, mais si je veux la syntaxe de requête ou la composition, alors RX me la donne là où les événements ne le font pas.
Rx est très général, il a donc une utilité illimitée, tout comme IEnumerable/IEnumerator a une utilité illimitée. IE tire les valeurs, IO pousse les valeurs.
Foreach est un exemple concret où les IEnumerables sont utiles, mais cela n'explique pas IEnumerable, ni le rendement ou quoi que ce soit. Il en va de même avec Rx.
Être capable de regarder quelque chose d'un point de vue ou d'un point de vue Push, et être capable de contrôler la direction ou les moyens, est très puissant, car maintenant vous pouvez pousser et tirer des calculs à volonté, en utilisant la requête LINQ opérateurs pour "gratuit", contre un IO, parce que c'est le double mathématique de IE.
Je viens de jeter un premier coup d'œil à Rx, mais un projet amusant pour lequel je vais l'utiliser est de créer un widget Silverlight qui affiche l'activité dans notre application Web ASP.NET MVC (quelles méthodes d'action ont été appelées, par quel utilisateur, etc.) . Il semble que Rx puisse aider avec beaucoup de choses dans ce projet, telles que la gestion des accès concurrents et la limitation.