Реактивные расширения c#

15
Microsoft TechDays http://www.techdays.ru Реактивные расширения C# Вомпе Федор cтудент-партнер Microsoft [email protected] u Twitter: @qosys Блог: http://b.qosys.info

Upload: niloufer-fayaz

Post on 01-Jan-2016

87 views

Category:

Documents


0 download

DESCRIPTION

Реактивные расширения C#. Вомпе Федор c тудент -партнер Microsoft. [email protected] Twitter: @ qosys Блог : http://b.qosys.info/. Что такое “ реактивные расширения ”. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Реактивные расширения C#Вомпе Федорcтудент-партнер Microsoft

[email protected]: @qosysБлог: http://b.qosys.info/

Page 2: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Что такое “реактивные расширения”

Reactive Extensions(Rx), “реактивные расширения” – набор LINQ-расширений .NET(C#), упрощающих работу с асинхронными вычислениями и вычислениями на базе событий

Другое название LINQ to Rx(John Skeet), LINQ to EventsПлатформы - .NET 3.5 и 4.0, Silverlight 3 и 4, JavaScript, WP7, XNA 3.1 и 4.0Rx доступна через NuGet

Page 3: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Rx-библиотеки

stable - v1.0.10425, experimental - v1.1.10425

Page 4: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Пример: выпадающая подсказка(suggest)

пример из Rx Design Guidelines

Page 5: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

IEnumerable<T>Cуществующий интерфейс IEnumerable<T> используется для создания последовательностей из объектов

Получаемые последовательности – pull-последовательности, т.к. предоставляют свое содержимое по запросу, MoveNext() :

GetEnumerator() -> MoveNext() -> MoveNext() .... -> MoveNext() -> break

Page 6: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Пример IEnumerable<T> последовательностиIEnumerable<int> NaturalNumbers(){ int number = 0; while(true) { number++; yield return number; //yield! }}

...

foreach(var num in NaturalNumbers()) PrintSquares(num);

Page 7: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Идея реактивных расширенийА что если LINQ использовать для событий и отложенных вычислений? (Как и для перечислимых IEnumerable последовательностей?)

В .NET есть паттерн наблюдатель[Observer, GoF, p293] для создания цепочки связанных событий – интерфейсы IObservable<T>, IObserver<T>

http://www.vincehuston.org/dp/observer.html

Page 8: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

IObservable<T>

Пара IObservable<>/IObserver<> дуальна паре IEnumerable<>/ IEnumerator<>

Вместо pull-коллекций выступают push-коллекции

Page 9: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Pull vs Push

Источник(Source) Цель(Target)

PULL

PUSH

PULL – Цели необходимо потребовать данныеPUSH – Источник предупреждает цель когда есть данные

Page 10: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Rx: метод Subscribe<>

Свой класс Observer можно не создавать(использование обычного Subscribe), вместо этого можно использовать extension-метод Rx Subscribe<>(OnNext, опционально OnError, опционально OnCompleted)

Пример :var timedstream = Observable.Interval(TimeSpan.FromSeconds(1));

// subscribe to the IObservabletimedstream.Subscribe(v => Console.WriteLine(v));

Page 11: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Простой пример обработки мыши

Demo

Page 12: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Реализация Drag & Drop в несколько строчек

Demo

Page 13: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Где можно использовать Rx?

В приложениях для организации асинхронных и вычислений на основе событийПри работе с асинхронными последовательностями данныхВ паре с Px(Parallel extensions=Task Parallel Library + PLINQ, раньше были внутри Rx)Для упрощения логики - код становится компактным и более читабельным

Вполне возможно, что Rx будет в стандартной поставке Visual Studio vNext

Page 14: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Про что не было сказано

Внутренне устройство библиотеки (Конструкторы последовательностей, Комбинаторы, etc..)“Горячие” и “Холодные” последовательности событийПрименение Rx c библиотекойTPL

Page 15: Реактивные расширения  C#

Microsoft TechDayshttp://www.techdays.ru

Литература

Reactive Extension Homepage http://msdn.microsoft.com/en-us/data/gg577609Reactive Extensions for .NET (Rx) [Forum] http://social.msdn.microsoft.com/Forums/en-US/rx/threadsRx Design Guidelines – заметки о том, как проектировался Rx http://go.microsoft.com/fwlink/?LinkID=205219101 Rx Samples (not yet)http://rxwiki.wikidot.com/101samplesRx Sandbox http://mnajder.blogspot.com/2011/05/rx-projects-update.html