Я понимаю основы Rx. Я борюсь, как бы вы на самом деле использовали это помимо академических примеров? Каковы некоторые общие, простые сценарии реального мира, в которых Rx является гораздо лучшим решением, чем то, что мы имеем сегодня в .NET?
Я понимаю основы Rx. Я борюсь, как бы вы на самом деле использовали это помимо академических примеров? Каковы некоторые общие, простые сценарии реального мира, в которых Rx является гораздо лучшим решением, чем то, что мы имеем сегодня в .NET?
Ответы:
Кучу хороших примеров можно найти на вики-странице 101 Rx Samples.
Rx позволяет писать код, который вместе организует одновременные события. Если вы когда-либо использовали TPL (то есть Task), вам приходилось делать запутанные обратные сальто, чтобы попытаться ContinueWith или WaitAll на правильных вещах, Rx для вас.
Например, рабочий процесс «Для каждого элемента в этом массиве вызовите веб-службу, и когда все эти запросы вернутся, сделайте что-нибудь еще. Если какой-либо из них потерпит неудачу, все это не удастся».
Раскрытие информации, бесстыдный подход вперед: книга, которую мы с Джесси Либерти написали о Rx, была разработана, чтобы решить именно этот вопрос: «Как мне использовать Rx в моей повседневной работе?»; "Что я могу с этим сделать ?"
Прежде всего, IObservable - это событие . Таким образом, в любом месте, где вы используете события для внутренних целей, вы можете использовать IObservable - и если вам позже потребуется применить LINQ к этому событию, вы сможете сделать это без рефакторинга.
Во-вторых, RX подходит для любой ситуации, когда вам нужно запускать код асинхронно . Например, вызов веб-службы или загрузка большого изображения.
Но когда это действительно начинает светиться - если ваша программа достигает некоторой «критической массы» использования IObservable и вы начинаете комбинировать различные наблюдаемые, вы будете поражены, насколько легкими становятся некоторые задачи.
В обоих случаях теперь стандартный способ получения данных - через события, но если мне нужен синтаксис запроса или композиция, то RX дает мне их там, где событий нет.
Rx очень общий, поэтому он имеет неограниченную полезность, так же как IEnumerable / IEnumerator имеет неограниченную полезность. IE извлекает значения, IO подталкивает значения.
Foreach - это конкретный пример того, как IEnumerables могут пригодиться, но это не объясняет IEnumerable, yield или что-то еще. То же самое и с Rx.
Возможность смотреть на что-либо с точки зрения вытягивания или выталкивания, а также возможность контролировать направление или средства - очень мощный инструмент, потому что теперь вы можете перемещать и тянуть вычисления по своему желанию, используя запрос LINQ. операторы «бесплатно», против ввода-вывода, потому что это математический двойник IE.
Я только что впервые посмотрел на Rx, но один интересный проект, для которого я использую его, - это создание виджета Silverlight, который отображает активность в нашем веб-приложении ASP.NET MVC (какие методы действий были вызваны, каким пользователем и т. Д.) . Кажется, что Rx может помочь во многих вещах в этом проекте, таких как управление параллелизмом и регулирование.