1 / 15

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

Реактивные расширения C#. Вомпе Федор c тудент -партнер Microsoft. vompe@physics.msu.ru Twitter: @ qosys Блог : http://b.qosys.info/. Что такое “ реактивные расширения ”.

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Реактивные расширения C# Вомпе Федор cтудент-партнер Microsoft vompe@physics.msu.ru Twitter: @qosys Блог: http://b.qosys.info/

  2. Что такое “реактивные расширения” ReactiveExtensions(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.0 • Rx доступна черезNuGet

  3. Rx-библиотеки stable - v1.0.10425, experimental - v1.1.10425

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

  5. IEnumerable<T> Cуществующий интерфейс IEnumerable<T> используется для создания последовательностей из объектов Получаемые последовательности – pull-последовательности, т.к. предоставляют свое содержимое по запросу, MoveNext() : GetEnumerator() -> MoveNext() -> MoveNext() .... -> MoveNext() -> break

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

  7. Идея реактивных расширений А чтоесли LINQ использоватьдлясобытий и отложенныхвычислений? (Как и дляперечислимыхIEnumerableпоследовательностей?) В .NET естьпаттерннаблюдатель[Observer, GoF, p293] длясозданияцепочкисвязанныхсобытий– интерфейсыIObservable<T>, IObserver<T> http://www.vincehuston.org/dp/observer.html

  8. IObservable<T> Пара IObservable<>/IObserver<> дуальна паре IEnumerable<>/IEnumerator<> Вместо pull-коллекцийвыступаютpush-коллекции

  9. Pull vs Push PULL Источник(Source) Цель(Target) PUSH PULL – Цели необходимо потребовать данные PUSH– Источник предупреждает цель когда есть данные

  10. Rx: метод Subscribe<> Свойкласс Observer можнонесоздавать(использованиеобычного Subscribe), вместоэтогоможноиспользовать extension-метод Rx Subscribe<>(OnNext, опциональноOnError, опциональноOnCompleted) Пример : vartimedstream = Observable.Interval(TimeSpan.FromSeconds(1)); // subscribe to the IObservable timedstream.Subscribe(v => Console.WriteLine(v));

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

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

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

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

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

More Related