Хорошее введение в .NET Reactive Framework [закрыто]


218

Помимо документации Microsoft, есть ли хорошее введение и учебное пособие по структуре Microsoft Reactive (Rx)?

Кроме того, что является хорошим примером (с кодом), который Reactive облегчает проблему программирования, которую сложно решить с помощью традиционных методов асинхронного кодирования?


Я продолжаю искать - мне нужно увидеть много примеров, прежде чем я пойму, для чего он лучше всего используется.
Сэм Харвелл

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

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

Ответы:


97

ОБНОВЛЕНИЕ : сообщения в блоге были заменены моей онлайн-книгой www.IntroToRx.com . Это всеобъемлющая книга из 19 глав, доступная бесплатно. Вы можете просмотреть его в Интернете или скачать мобильную версию для своего разжигания. Вы также можете получить его напрямую из Amazon за небольшую плату (~ 99c / 77p). Если книга не соответствует вашим потребностям или ожиданиям, дайте мне знать (автору), и мы добьемся большего успеха для v2.

Спасибо за ссылку на сообщение Hot / Cold. Это только одна часть полной серии ,

  1. Введение в Rx
  2. Статические и методы расширения
  3. Управление жизненным циклом - заполнение и отписка
  4. Управление потоком
  5. Объединение нескольких IObservable потоков
  6. Планирование и создание потоков
  7. Горячие и холодные наблюдаемые
  8. Тестирование Rx
  9. Buffer, Window, Join и Group Join

Я буду обновлять этот блог новыми вводными материалами по Rx.

Для более продвинутых вещей вы хотите перейти на Rx Forum (MSDN).


7
Я затягивал изучение Rx, потому что все учебные материалы представлены в виде видео. +1 за предоставление этого текстового ресурса.
Даниэль Шиллинг

Перечислите, эта ссылка мертва.
Маслоу

2
Да здравствует Перечислите эту ссылку
Full Time Skeleton

1
Я работаю с Джеймсом (EnumerateThis), и он просто не трогал это годами. Кажется, у него нет ни времени, ни аппетита, чтобы его оживить
Ли Кэмпбелл

85

Вот вики-сайт с множеством примеров кода, демонстрирующих, как использовать различные функции платформы .NET Rx: http://rxwiki.wikidot.com/101samples

Я обнаружил, что это самый всеобъемлющий сайт, с которого быстрее всего начать.


12
Насколько я могу судить, эта вики не так много говорит, какую ссылку включить. Что довольно ... расстраивает.
Джордж Мауэр

ммм, просто добавьте dll и откройте проводник объектов и найдите класс. конечно контекстное меню правой кнопкой мыши в Visual studio тоже помогает
Джо

62

5
+1 Очень рекомендую эти видео, я узнал много, а также ознакомился с некоторыми видео Барта де Смета по IQueryable и IQbservable. Вы лучше понимаете внутренности Rx.
Гидеон

1
Полный пример проекта для видео «DevCamp 2010 keynote» находится здесь: bartdesmet.net/download/Rx40Samples.zip
Омер Равив

16

Вот пример чего-то, что легко сделать с помощью реактивного программирования, но беспорядочно (если не сложно) с классическими событиями, оно рисует линии, когда кнопка мыши нажата. Это читабельно, нет явной обработки состояния:

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(Я должен признаться, что в этом примере Pairwise () является доморощенным ...)

Самая важная вещь в IObservable - это то, что он «компонуется», как и IEnumerable.

Я настоятельно рекомендую видео, упомянутое в другом ответе. На самом деле на Channel 9 есть несколько разных видео на эту тему:


Откуда взялся. До тех пор, пока я не смогу его использовать, я должен пропустить ссылку
TimothyP

1
@TimothyP, я думаю, что это может быть возврат к старой версии. Это или я сам написал (я тогда играл в реализацию методов расширения IObservable). Из того, что я вижу, в последней версии реактивных расширений есть метод TakeUntil, который называется хорошо подходящим.
Бенджол

Это потрясающий пример, который показывает дух Rx. Спасибо.
Дан Абрамов

Можете ли вы поделиться реализацией Pairwise ()?
бластер

1
@blaster, как об этой реализации: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor




4

Как ни странно, домашняя страница Reactive Extensions ссылается на дюжину видео и блогов, но забывает ссылаться на исчерпывающую официальную справочную документацию. Это позор, если вы знаете команду, пожалуйста, попросите их исправить свой сайт!


3

Играйте с Rx Sandbox, чтобы получить очень интуитивное представление о том, что означают различные комбинаторы. Это лучший инструмент обучения, который я видел.


2

Просмотрите эти статьи и, в частности, загрузите соответствующий исходный код и поиграйте с ним.

Поверьте, это поможет


2

Чтобы ответить на второй вопрос, вот проблема, которая может извлечь большую пользу из Rx. Это называется «Быстро разбогатеть».

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

(Пожалуйста, не стесняйтесь изменить историю выше :))

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

В этом случае источник является асинхронным источником пачек наличных (производитель). Ваши сотрудники и поставщики ожидают денег, но вы должны потреблять пачки, распаковывать их и использовать свою собственную бизнес-логику, чтобы переупаковывать их соответствующим образом, чтобы платить им.

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

Вы можете представлять каждую пачку байтом [].

Это довольно распространенная ситуация в реальном мире; когда вы извлекаете какой-либо ресурс [например, веб-страницы для поисковых систем, изображения или видео] в сети или данные из периферийных устройств, вы получаете их кусками байтов (возможно, с заголовками). В одном потоке или в многопоточной среде, с которой слишком сложно работать, вы склонны объединять и обрабатывать их. Уже нет!!


это всего лишь некоторые производители (продавцы), вызывающие OnNext на том же IObserver <T>, а затем потребитель, подписывающийся, но гарантирующий, что он наблюдает в другом потоке, в котором он производится (OnNext).
Ли Кэмпбелл


1

Распространяется ли ваша оговорка «исключая документацию Microsoft» на видеоролики на 9 канале?

От создателя реактивной платформы Эрика Мейера: - Эксперт к Эксперту: Брайан Бекман и Эрик Мейер - Внутри .NET Reactive Framework (Rx)

Новое : начало работы с расширениями Rx для .NET



1

В дополнение к ссылкам Андреаса Хоффмана (они мне очень помогли, когда я изучал Rx)

Вот некоторые из Барт де Смет (ОЧЕНЬ умный парень, который все объясняет очень хорошо) Видео:

Что-то вроде прогона Rx:
Rx - лечение асинхронного программирования блюза

Немного внутренностей + немного философии, эти видео действительно поучительны:
Min LINQ - Суть LINQ
(вышеприведенное видео рассказывает о том, как LINQ вроде как относится к другим вещам, например, к Rx)

Наблюдения за IQbservable - Двойственность IQueryable


1

DEVHOL202 - Лечение асинхронного блюза с помощью Reactive Extensions для .NET (PDF, 2 МБ) - лучшая лаборатория / учебник, который я когда-либо видел. Он проведет вас через основы библиотеки, чтобы вы могли строить и разрабатывать то, что вы узнали.

Существует также версия JavaScript. Поиск Google для "Реактивных Расширений Руки на Лаборатории".


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