Хорошее введение в .NET Reactive Framework

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

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

+189
источник поделиться
16 ответов

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

Я нашел, что это самый полный сайт, и тот, с которого можно начать с самого начала.

+79
источник

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

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

  • Введение в Rx
  • Статические и методы расширения
  • Управление жизненным циклом - завершение и отмена подписки
  • Управление потоком
  • Объединение нескольких потоков IObservable
  • Планирование и потоки
  • Горячие и холодные наблюдаемые
  • Тестирование Rx
  • Буфер, окно, объединение и объединение групп

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

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

+79
источник

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

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.

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

+15
источник

Как только вы перейдете к основным элементам, включая HandsOnLab убедитесь, что вы посмотрите Ли Кэмпбелл Горячие и холодные наблюдатели, которые взяли некоторые тайные загадки из Rx для меня:)

+12
источник

Вы можете найти эту серию статей (их четыре) об реактивной LINQ полезной: Реактивное программирование (II.) - Знакомство с Reactive LINQ.

У него есть пример написания игры, использующей его, поэтому он, надеюсь, будет тем, что вы ищете.

+4
источник

Я также нашел Представляем Reactive Framework Part I на CodeBetter.com. Существует продолжение первой части на том же сайте.

Надеюсь, это поможет вам.

+4
источник

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

+4
источник

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

+3
источник

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

Доверьтесь, что это поможет

+2
источник

Чтобы ответить на второй вопрос, вот проблема, которая может принести много пользы от Rx. Это называется "Быстрое обогащение".

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

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

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

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

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

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

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

+2
источник

У Джесси Либерти есть книга, опубликованная в октябре 2011 года:

Amazon.com: программирование реактивных расширений и LINQ

И вот видео RxWorkshop на Channel9:

Channel9: RxWorkshop

+2
источник

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

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

Новый: Начало работы с Rx Extensions для .NET

+1
источник

DEVHOL202 - Исцеление асинхронного блюза с Reactive Extensions для .NET (PDF, 2 MB) - лучшая лаборатория/учебник я ' до сих пор. Это поможет вам понять основы библиотеки, чтобы вы могли создавать и разрабатывать то, что вы узнали.

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

+1
источник

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

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

Допустим пробег Rx:
Rx - Исцеление асинхронного программирования Blues

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

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

+1
источник

Мне понравилось Введение в Rx Part 1 - Типы ключей, и оно показало основные функции.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос