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


81

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


3
Я написал демонстрацию поиска Bing в WPF с помощью Rx: blog.andrei.rinea.ro/2013/06/01/…
Андрей Рыня 01

2
Я отвечаю именно на этот вопрос в серии сообщений в моем блоге: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Мухаммад Рехан Саид

1
Пожалуйста, посетите github.com/AdaptiveConsulting/ReactiveTraderCloud . Я думаю, что это хороший пример, потому что они использовали много Reactive Extension для своего образца. Ура!
thangchung

Ответы:


40

Кучу хороших примеров можно найти на вики-странице 101 Rx Samples.


13
Спасибо за ссылку. Там есть неплохие образцы. До сих пор не совсем понимаю, что это пощечина - образец «о, это каноническая проблема, которую он решает». Опять же, может быть, я просто медленно осваиваю.
Кейт Хилл

9
Хм ... несмотря на высокий балл, этот ответ остается "только для ссылки". Не могли бы вы немного уточнить это?
jub0bs 05

разве они не академические ?
Лэй Ян

28

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

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

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


Это просто прояснило, что мне нужен или нужен Rx
frostymarvelous

25

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

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

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


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

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


2

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

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.