Первая часть перевода серии статей о Reactive Framework. Автор Bnaya Eshet.
Rx представляет собой push-модель событийно-ориентированной коллекции на основе
Что такое Reactive Framework Extension?
Rx представляет собой push-модель событийно-ориентированной коллекции на основе
IEnumerable<T>
. Фреймворк включает в себя интерфейс IObservable<T>
, аналог IEnumerable<T>
и IObserver<T>
, аналог Enumerator<T>
.Copy Source | Copy HTML
- // Summary:
- // Represents a push-style collection.
- public interface IObservable<T>
- {
- // Summary:
- // Subscribes an observer to the observable sequence.
- IDisposable Subscribe(IObserver<T> observer);
- }
Copy Source | Copy HTML
- // Summary:
- // Supports push-style iteration over an observable sequence.
- public interface IObserver<T>
- {
- // Summary:
- // Notifies the observer of the end of the sequence.
- void OnCompleted();
- //
- // Summary:
- // Notifies the observer that an exception has occurred.
- void OnError(Exception exception);
- //
- // Summary:
- // Notifies the observer of a new value in the sequence.
- void OnNext(T value);
- }
На самом деле мы имеем шаблон push-коллекции(коллекция может быть бесконечной),
которая может передавать данные в наш объект IObserver<T>
. Имея такой шаблон,
мы можем применять LINQ к подобной коллекции. Более детально IObservable<T>
и IObserver<T>
будут рассмотрены во второй части.
Interactive (IEnumerable<T>) Vs. Reactive (IObservable<T>)
Рассмотрим обе парадигмы на примере чтения журнала. Допустим, что я люблю дома читать
несколько журналов каждый день. Перед тем как я смогу их прочитать, они должны каким-то
образом попасть ко мне домой. Тут у нас есть два варианта:
- Интерактивный. Каждый день ходить в ближайший магазин( или в несколько, если
в одном магазине не окажется всех необходимых журналов), выбрать нужные журналы,
постоять в очереди, оплатить их и вернуться домой
- Реактивный. Подписаться на журналы и их будут доставлять прямо домой.
Итоги
Реактивная модель предпочтительна для параллельных вычислений и позволяет нам избавиться
от накладных расходов на поход в магазин и стояние в очереди(не нужно ждать заблокированные потоки). В следующих частях мы обсудим более подробно сценарии и техники использования данного подхода.
Как начать работу с Rx
Библиотеку можно взять здесь. Доступны версии для .NET 3.5 и 4.0
В проекте необходимо добавить ссылку на System.Reactive.