Search
Write a publication
Pull to refresh

Reactive Extension (Rx) для начинающих (часть 1)

Первая часть перевода серии статей о Reactive Framework. Автор Bnaya Eshet.

Что такое Reactive Framework Extension?


Rx представляет собой push-модель событийно-ориентированной коллекции на основе IEnumerable<T>. Фреймворк включает в себя интерфейс IObservable<T>, аналог IEnumerable<T> и IObserver<T>, аналог Enumerator<T>.

Copy Source | Copy HTML
  1. // Summary:
  2. //     Represents a push-style collection.
  3. public interface IObservable<T>
  4. {
  5.     // Summary:
  6.     //     Subscribes an observer to the observable sequence.
  7.     IDisposable Subscribe(IObserver<T> observer);
  8. }


Copy Source | Copy HTML
  1. // Summary:
  2. //     Supports push-style iteration over an observable sequence.
  3. public interface IObserver<T>
  4. {
  5.     // Summary:
  6.     //     Notifies the observer of the end of the sequence.
  7.     void OnCompleted();
  8.     //
  9.     // Summary:
  10.     //     Notifies the observer that an exception has occurred.
  11.     void OnError(Exception exception);
  12.     //
  13.     // Summary:
  14.     //     Notifies the observer of a new value in the sequence.
  15.     void OnNext(T value);
  16. }


На самом деле мы имеем шаблон push-коллекции(коллекция может быть бесконечной),
которая может передавать данные в наш объект IObserver<T>. Имея такой шаблон,
мы можем применять LINQ к подобной коллекции. Более детально IObservable<T>
и IObserver<T> будут рассмотрены во второй части.

Interactive (IEnumerable<T>) Vs. Reactive (IObservable<T>)


Рассмотрим обе парадигмы на примере чтения журнала. Допустим, что я люблю дома читать
несколько журналов каждый день. Перед тем как я смогу их прочитать, они должны каким-то
образом попасть ко мне домой. Тут у нас есть два варианта:
  • Интерактивный. Каждый день ходить в ближайший магазин( или в несколько, если
    в одном магазине не окажется всех необходимых журналов), выбрать нужные журналы,
    постоять в очереди, оплатить их и вернуться домой
  • Реактивный. Подписаться на журналы и их будут доставлять прямо домой.


Итоги


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

Как начать работу с Rx


Библиотеку можно взять здесь. Доступны версии для .NET 3.5 и 4.0
В проекте необходимо добавить ссылку на System.Reactive.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.