Я розумію основи Rx. Де я борюся, як би ви насправді використали це, не лише академічні приклади? Які загальні, прості реальні сценарії, коли Rx є набагато кращим рішенням, ніж те, що ми маємо сьогодні в .NET?
Я розумію основи Rx. Де я борюся, як би ви насправді використали це, не лише академічні приклади? Які загальні, прості реальні сценарії, коли Rx є набагато кращим рішенням, ніж те, що ми маємо сьогодні в .NET?
Відповіді:
Багато хороших прикладів див. У вікі 101 Rx Samples
Rx дозволяє писати код, який організовує паралельні події разом. Якщо ви коли-небудь використовували TPL (тобто Завдання), тоді вам доводилося робити заплутані зворотні перекидання, щоб спробувати ContinueWith або WaitAll у правильних речах, Rx для вас.
Наприклад, робочий процес "Для кожного елемента в цьому масиві зателефонуйте веб-службі, і коли всі ці запити повернуться, зробіть щось інше. Якщо будь-який з них зазнає невдачі, провальте все".
Розкриття інформації, безсоромна робота: книга, яку ми з Джессі Ліберті написали про Rx, була розроблена для вирішення саме цього питання: "Як я використовую Rx у своїй повсякденній роботі?"; "Що я можу з цим зробити ?"
Перш за все, IObservable - це подія . Отже, у будь-якому місці, де ви внутрішньо використовуєте події, ви можете використовувати IObservable - і якщо пізніше вам потрібно застосувати LINQ до цієї події, ви зможете це зробити без рефакторингу.
По-друге, RX підходить для будь-якої ситуації, коли вам потрібно запустити свій код асинхронно . Наприклад, виклик веб-служби або завантаження великого зображення.
Але коли він справді починає блищати - якщо ваша програма досягне деякої "критичної маси" використання IObservable, і ви почнете поєднувати різні спостережувані дані, ви будете вражені, наскільки легкими стають деякі завдання.
В обох випадках зараз стандартний спосіб отримання даних - це події, але якщо я хочу синтаксис запиту або композицію, то RX надає їх мені там, де події цього не роблять.
Rx дуже загальний, тому він має необмежену корисність, як і IEnumerable / IEnumerator має необмежену корисність. IE тягне значення, IO штовхає значення.
Foreach - це конкретний приклад того, де IEnumerables дуже корисні, але це не пояснює IEnumerable, а також врожайність чи щось інше. Те саме стосується і Rx.
Можливість поглянути на щось або з точки зору витягування, або з точки зору штовхання, а також мати можливість керувати напрямком чи засобами, дуже ефективно, тому що тепер ви можете штовхати і тягнути обчислення навколо за допомогою запиту LINQ оператори "безкоштовно", проти IO, оскільки це математичний двійник IE.
Я щойно вперше подивився Rx, але одним цікавим проектом, для якого я його використаю, є створення віджета Silverlight, який відображає активність у нашому веб-додатку ASP.NET MVC (які методи дій були викликані, яким користувачем тощо) . Здається, Rx може допомогти у багатьох справах цього проекту, таких як управління паралельністю та регулювання.