Хороший пример использования реактивных расширений [закрыто]
Я понимаю основы Rx. Где я борюсь, как бы вы на самом деле использовали это за пределами академических примеров? Каковы некоторые общие, простые сценарии реального мира, где Rx является гораздо лучшим решением, чем то, что мы имеем сегодня в .NET?
6 ответов:
для получения нескольких хороших примеров см. 101 RX Samples wiki
Rx позволяет писать код, который организует одновременные события вместе. Если вы когда-либо использовали TPL (т. е. Task), то должны были делать запутанные обратные сальто, чтобы попытаться продолжить или дождаться правильных вещей, Rx для вас.
например, рабочий процесс "для каждого элемента в этом массиве вызовите веб-службу, и когда все эти запросы вернутся, сделайте что-нибудь еще. Если кто-то из них потерпит неудачу, провалите все дело".
раскрытие, бесстыдная вилка впереди: книга, которую мы с Джесси Либерти написали о Rx был разработан, чтобы решить именно этот вопрос: "Как я использую Rx в своей повседневной работе?"; "Что я могу do С этого?"
прежде всего, IObservable событие. Поэтому в любом месте, где вы используете события внутренне, вы можете использовать IObservable - и если вам позже нужно применить LINQ к этому событию, вы можете сделать это без рефакторинга.
во-вторых, RX подходит для любой ситуации, когда вам нужно запустить свой код asynchronousely. Например, вызов веб-службы или загрузка большого изображения.
но когда он действительно начинает светить - если ваша программа достигает некоторых " критических масса " IObservable использования и вы начинаете объединение различные наблюдаемые вы были бы поражены, как легко некоторые задачи становятся.
- измерения прибора
- данные поступают по шине сообщений
в обоих случаях теперь стандартный способ получения данных - через события, но если я хочу синтаксис запроса или композицию, то RX дает мне его там, где события этого не делают.
RX является очень общей, так что имеет неограниченный утилита, как интерфейс IEnumerable/IEnumerator перечислитель имеет неограниченные полезности. Т. е. тянет значения, ИО толкает ценностей.
Foreach-это конкретный пример того, где пригодятся IEnumerables, но это не объясняет IEnumerable или yield или что-то еще. То же самое происходит с Rx.
возможность смотреть на что-то либо с точки зрения тяги, либо с точки зрения толчка, и возможность контролировать направление или средства, является очень мощным, потому что теперь вы можете нажимать и вытягивать вычисления по желанию, используя операторы запроса LINQ для "свободного", против ввода-вывода, потому что это математический двойник IE.
Я только что посмотрел на Rx, но один забавный проект, для которого я его использую, - это создание виджета Silverlight, который отображает активность в нашем ASP.NET MVC web app (какие методы действий были вызваны, каким пользователем и т. д.). Похоже, что Rx может помочь со многими вещами в этом проекте, такими как управление параллелизмом и дросселирование.