Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Rx
Reactive Extensions
          Юрий Муленко
              Betgenius
Rx
Библиотека для написания
асинхронных, event-based
программ.

Почему «реактивные»
расширения?
Интерактивный подход (pull)
                  Окружающая среда
Реактивный подход (push)
                Окружающая среда
Push для пользователя

•   RSS клиенты
•   Twitter клиенты
•   Стены в социальных сетях
•   ICQ/MSN/Google Talk
•   Календари/будильники
•   Формулы в Excel
Push для программиста

•   Windows message loop
•   Driver interrupt
•   Observer pattern
•   Ajax / APM / callbacks
•   Events
•   MVC ? Node JS?
Где удобней применять Push

• Event-driven
• Complex Event Processing
• Много асинхронных операций

• Fraud-detection
• Stock operations
С Push сложней работать

• Отсутствует унифицированный
  API для Push модели
• Нет средств для композиции
• Асинхронность – всегда
  проблемы
• Нет контроля над окружающей
  средой
Rx
Библиотека для написания
асинхронных, event-based
программ при помощи
observable коллекций.
Коллекции = pull
Observable = push
Observable коллекции

• Интерфейсы
  IEnumerable/IObservable
  двойственны =>
• Взаимозаменяемы =>
• Действуют те же законы =>
• Можно рассматривать поток
  событий как коллекцию =>
• LINQ !!!
Подписка
Создание
• FromEvent / FromEventPattern
• FromAsyncPattern
    – BeginXXX/EndXXX
    – Делегаты
•   Enumerable.ToObservable()
•   Subject
•   Своя имплементация
•   Другие Observable
•   ...
Создание из события
LINQ - Select
LINQ - Where
Специфичные расширения

• Для композиции
• С временной компонентой
Шариковые диаграммы


                          Время


   Событие   OnNext

   Ошибка    OnError

   Конец     OnComplete
Примитивы

.Never<T>()

.Empty<T>()


.Return<T>(T value)


.Throw<T>(Exception)
IO<T> Merge(IO<T> x, IO<T> y)

X



Y




Z
IO<T> Concat(IO<T> x, IO<T> y)

X



Y




Z
IO<Z> Zip(IO<X> x, IO<Y> y,
           Func<X, Y, Z> f)
X



Y


         f   f       f

Z
IO<X> Retry(IO<X> x, int count)

X



          Y




Z
IO<X> Sample(IO<X> x, TimeSpan
           interval)
X



      interval   interval




Z
И много других
Sum Count Any Min Max Scan
Replay Publish    SkipWhile Then
Switch Interval Delay Throttle
Sample Buffer TimeInterval Timeout
Timestamp Repeat Retry Next
OnErrorResumeNext Catch And Join
GroupBy
…
http://msdn.microsoft.com/en-us/library/hh212048(v=vs.103).aspx
DEMO
Rx версии
• .NET 3.5
• .NET 4.0
• Текущая 1.0SP1
• Experimental 1.1
• Доступна 2.0 beta
• Rx for JavaScript
http://msdn.microsoft.com/en-us/data/gg577610
Ресурсы
• Rx @ Data Developer Center
http://msdn.microsoft.com/en-us/data/gg577609
• Rx @ Channel 9
http://channel9.msdn.com/tags/Rx/
• Rx Design Guidelines
http://go.microsoft.com/fwlink/?LinkID=205219
• Rx Hands-on Labs
http://blogs.msdn.com/b/rxteam/archive/2010/07/15/rx-hands-on-labs-
published.aspx
• (Not yet) 101 Rx Samples
http://rxwiki.wikidot.com/101samples
• Google/Bing/Blogs
Спасибо

Feedback ?
 Part 2 ?

More Related Content

Rx

Editor's Notes

  1. Чебурашка, дай полотенце
  2. Внимание на доску