Хороший пример использования реактивных расширений

Я понимаю основы Rx. Где я борюсь, так это то, как вы на самом деле используете это вне академических примеров? Каковы некоторые общие, простые сценарии реального мира, где Rx - гораздо лучшее решение, чем то, что мы имеем сегодня в .NET?

Ответ 2

Rx позволяет вам писать код, который совместно организует параллельные события. Если вы когда-либо использовали TPL (т.е. Задание), тогда вам пришлось выполнять свернутые обратные фоны, чтобы попытаться продолжить или с помощью WaitAll по правильным вещам, Rx для вас.

Например, рабочий процесс "Для каждого элемента в этом массиве вызовите веб-службу, и когда все эти запросы вернутся, сделайте что-нибудь еще. Если кто-то из них потерпит неудачу, провалите все это".

Раскрытие информации, Бесстыдный плагин вперед: Книга, которую Джесси Либерти и я написал о Rx, были предназначены для решения именно этого вопроса: "Как использовать Rx в свой день? -дневная работа?"; "Что я могу сделать с этим?"

Ответ 3

Прежде всего, IObservable - это событие. Таким образом, в любом месте, где вы используете события внутри, вы можете использовать IObservable - и если позже вам понадобится применить LINQ к этому событию, вы сможете сделать это без рефакторинга.

Во-вторых, RX подходит для любой ситуации, когда вам нужно запустить свой код асинхронно. Например, вызов веб-службы или загрузка большого изображения.

Но когда он действительно начинает светиться - если ваша программа достигает некоторой "критической массы" использования IObservable, и вы начинаете комбинировать разные наблюдаемые, вы будете поражены тем, насколько легко задачи становятся.

Ответ 4

  • Измерения устройств
  • Данные, поступающие через шину сообщений

В обоих случаях стандартный способ получения данных - через события, но если я хочу синтаксис запроса или состав, тогда RX предоставляет его мне, где нет событий.

Ответ 5

Rx очень общий, поэтому он имеет неограниченную полезность, так же как IEnumerable/IEnumerator имеет неограниченную полезность. IE вытягивает значения, IO выдает значения.

Foreach - это конкретный пример того, где IEnumerables пригодится, но это не объясняет IEnumerable, или доходность или что-то еще. То же самое происходит с Rx.

Возможность взглянуть на что-либо с точки зрения выталкивания или на толкающую точку зрения и иметь возможность управлять направлением или средствами, очень эффективна, потому что теперь вы можете толкнуть и вытаскивать вычисления по желанию, используя операторы запросов LINQ для "free", против IO, потому что это математическое двойственное IE.

Ответ 6

У меня только первый взгляд на Rx, но один интересный проект, для которого я его буду использовать, - это создание виджета Silverlight, отображающего активность в нашем веб-приложении ASP.NET MVC (какие действия были вызваны, с помощью которых пользователь, и т.д). Кажется, что Rx может помочь с большим количеством вещей в этом проекте, например, concurrency управления и Throttling.