Гарне вступ до .NET Reactive Framework [закрито]


218

Окрім документації Майкрософт, чи є хороший вступ та посібник до рамки 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.

Дякуємо за посилання на гарячу / холодну публікацію. Це лише одна частина повної серії ,

  1. Вступ до Rx
  2. Статичні та розширювальні методи
  3. Довічне управління - заповнення та скасування підписки
  4. Управління потоком
  5. Об'єднання декількох потоків IObservable
  6. Планування і нарізка різьби
  7. Гарячі та холодні спостереження
  8. Тестування Rx
  9. Буфер, вікно, приєднання та приєднання до групи

Я продовжуватиму оновлювати цей блог ще кількома вступними матеріалами Rx.

Для отримання більш досконалих матеріалів ви хочете перейти на форум Rx (MSDN).


7
Я перетягую ноги, вивчаючи Rx, тому що всі навчальні матеріали є у формі відео. +1 за надання цього текстового ресурсу.
Даніель Шиллінг

Перерахуйте, що це посилання є мертвим.
Маслоу

2
Хай живе Перерахуйте це посилання
Скелет повного часу

1
Я працюю з Джеймсом (перерахуйте це), і він просто не торкався цього років. Він, схоже, не має часу чи апетиту відродити це
Лі Кемпбелл

85

Ось сайт вікі з великою кількістю прикладів коду, що демонструють, як використовувати різні функції рамки .NET Rx: http://rxwiki.wikidot.com/101samples

Я виявив, що це найбільш повний сайт там, і той, який найшвидший для початку.


12
Наскільки я можу сказати, це вікі не так багато, як те, яке саме посилання потрібно включити. Що скоріше ... розчаровує.
Джордж Мауер

Хмм просто додати dlls і відкрити провідник об'єктів і шукати клас. звичайно, також допомагає контекстне меню правою кнопкою миші у студії Visual
Джо

62

5
+1 Настійно рекомендую ці відео, я дізнався ЛОТ, а також перегляньте деякі відео Барта Де Смета на IQueryable та IQbservable. Ви краще зрозумієте нутрощі Rx.
gideon

1
Повний проект зразків для відео "Основна записка DevCamp 2010" знаходиться тут: 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.

Я радимо рекомендувати відео, згадане в іншій відповіді. Насправді на каналі9 є декілька різних відео:


Звідки. Поки що я не вживаю, я ніколи не можу його використовувати, я мушу пропустити посилання
TimothyP

1
@TimothyP, я думаю, це може бути поверненням до старій версії. Це я написав сам (я грав із впровадженням методів розширення IObservable у той час). Як я бачу, в останній версії реактивних розширень є метод TakeUntil, який називається , що виглядає добре.
Benjol

Це дивовижний приклад, який показує дух Rx. Дякую.
Дан Абрамов

Чи можете ви поділитися реалізацією Pairwise ()?
бластер

1
@blaster, як про цю реалізації: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor




4

Як не дивно, домашня сторінка " Реактивних розширень" посилається на десяток відео та блогів, але забуває посилатися на вичерпну офіційну довідкову документацію. Це соромно, якщо ви знаєте команду, попросіть їх виправити свій веб-сайт!


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 - Вилікування асинхронного блюзу за допомогою реактивних розширень для .NET (PDF, 2 Мб) - найкраща лабораторія / підручник, який я бачив досі. Він проводить вас через основи бібліотеки, щоб ви могли будувати та проектувати те, що ви дізналися.

Також є версія JavaScript. Шукайте в Google "Реактивне розширення руки в лабораторії".


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.