Je comprends les bases de Rx. Ce qui me pose problème, c'est comment vous utiliseriez cela au-delà des exemples académiques? Quels sont quelques scénarios simples et courants du monde réel où Rx est une solution bien meilleure que celle que nous avons aujourd'hui dans .NET?
Réponses
Trop de publicités?Pour une foule de bons exemples, voir le wiki 101 Rx Samples
Rx permet d'écrire du code qui orchestre simultanée des événements ensemble. Si vous avez déjà utilisé le TPL (c'est à dire des Tâches), puis avait à faire alambiquée des backflips pour essayer de ContinueWith ou WaitAll sur les bonnes choses, le Rx est fait pour vous.
Par exemple, le flux de travail "Pour chaque élément dans ce tableau, appeler un service web, et lorsque l'ensemble de ces demandes de revenir, de faire autre chose. Si l'un d'eux échoue, échoue à l'ensemble de la chose".
La divulgation, plug sans vergogne à l'avance: Le livre que Jesse Liberty et j'ai écrit à propos de Rx a été conçu pour résoudre exactement à cette question, "Comment puis-je utiliser Rx dans ma journée-à-jour de travail?"; "Que puis-je faire avec ça?"
Tout d'abord, IObservable est un événement. Ainsi, dans n'importe où vous utilisez des événements en interne, vous pouvez utiliser IObservable - et si plus tard vous avez besoin d'appliquer de LINQ pour cet événement, vous êtes en mesure de le faire sans le refactoring.
Deuxièmement, RX est digne de toute situation où vous avez besoin pour exécuter votre code asynchronousely. Par exemple, l'appel d'un service web, ou le chargement d'une image de grande dimension.
Mais quand il commence vraiment à briller - si votre programme atteint une certaine "masse critique" de IObservable d'utilisation et vous commencez à en combinant différentes observables vous seriez étonné de voir comment facile certaines tâches deviennent.
Rx est très générale, de sorte qu'il n'a pas de limite d'utilité, tout comme IEnumerable/IEnumerator n'a pas de limite d'utilité. IE tire valeurs, IO pousse les valeurs.
Foreach est un exemple concret d'où IEnumerables venir dans maniable, mais cela n'explique pas IEnumerable, ou de rendement ou de quoi que ce soit. Va de même avec les Rx.
Être capable de regarder quelque chose à partir d'un pull point de vue, ou pousser un point de vue, et d'être en mesure de contrôler la direction ou de moyens, est très puissant, parce que maintenant vous pouvez pousser et à tirer des calculs déplacer à volonté, à l'aide de LINQ opérateurs de requête pour le "libre", à l'encontre d'une IO, parce que c'est la mathématique double de l'ei.