Содержание
- 2. О Вашем инструкторе Сергей Тепляков Visual C# MVP, RSDN Team member [email protected] SergeyTeplyakov.blogspot.com 1-
- 3. Цели курса… Философию библиотеки Reactive Extensions Основы библиотеки TPL Использование библиотеки TPL Новые возможности C# 5
- 4. Необходимая подготовка Быть знакомы с основами языка C# и платформы .Net Обладать базовыми знаниями многопоточности Быть
- 5. Roadmap Введение в реактивные расширения Дуализм интерфейсов Основы Rx Observable sequences Events и Observables Observables и
- 6. Интерактивная и реактивная модель
- 7. Реактивное программирование Парадигма программирования, ориентированная на потоки данных и распространение изменений. Это означает, что должна существовать
- 8. Реактивная модель "Принцип Голливуда" – "Не звоните нам, мы сами вам позвоним" (Hollywood Principle - Don't
- 9. Rx - это 1. набор классов, представляющих собой асинхронный поток данных 2. набор операторов, предназначенных для
- 10. Зачем все это нужно? Social media Stock tickers RSS feeds GPS Server management UI events
- 11. Интерфейс IEnumerable Pull-based последовательности представлены интерфейсом IEnumerable. Это - коллекции в памяти (списки, вектора и т.д.)
- 12. Интерфейс IEnumerable public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerator : IDisposable { bool
- 13. Упрощение интерфейса IEnumerator public interface IEnumerator : IDisposable { (T | void | Exception) GetNext(); }
- 14. Интерфейс IObservable public interface IObservable { IDisposable Subscribe(IObserver observer); } public interface IObserver { void OnNext(T
- 15. Pull vs Push
- 16. Pull vs Push
- 17. Простые последовательности Observable.Empty (); Observable.Return(42); Observable.Throw (ex); Observable.Never (); OnComplete OnNext OnError new int[] {}; new
- 18. Методы Range Observable.Range(0, 3); OnNext(0) OnNext(1) OnNext(2) Enumerable.Range(0, 3); yield 0 yield 1 yield 2
- 19. Циклы for var xs = Observable.Generate( 0, x => x x + 1, x => x);
- 20. Контракт «реактивных» последовательностей Grammar: OnNext* [OnCompleted | OnError] Методы наблюдателя вызываются последовательно
- 21. Упрощение работы с интерфейсом IObserver var xs = Observable.Range(0, 10); 1. Только OnNext: xs.Subscribe(/*OnNext(int)*/x => Console.WriteLine(x));
- 22. Demo
- 23. События в .NET Объявление event Action E; Публикация E(42); Подписка E += x => Console.WriteLine(x);
- 24. Rx Объявление ISubject S = new Subject (); Публикация S.OnNext(42); Подписка S.Subscribe(x => Console.WriteLine(x));
- 25. class Program { event Action E; static void Main() { var p = new Program(); p.E
- 26. Отписка от событий Events static event Action E; //E += x => Console.WriteLine(x); Action action =
- 27. «События» первого класса Объект называют «объектом первого класса» когда он: может быть сохранен в переменной может
- 28. «События» первого класса // Сохранение в переменной IObservable textChanged = …; // Передача в качестве параметра
- 29. Возможности наблюдаемых последовательностей IObservable mouseMoves = from e in Observable.FromEventPattern (frm, "MouseMove") select e.EventArgs.Location; var filtered
- 30. Demo
- 31. Асинхронные операции Classical Async Pattern FileStream fs = File.OpenRead("data.txt"); byte[] buffer = new byte[1024]; fs.BeginRead(buffer, 0,
- 32. FromAsyncPattern static int LongRunningFunc(string s) { Thread.Sleep(TimeSpan.FromSeconds(5)); return s.Length; } Func longRunningFunc = LongRunningFunc; Func >
- 33. Tasks vs FromAsyncPattern Задачи (Tasks) – это унифицированный способ представления Single value asynchrony в .Net Framework
- 34. Task -> ToObservable static class FuncExtensions { internal static Task ToTask(this Func func, string s) {
- 35. Чем Rx не является Rx не заменяет существующей «асинхронности»: .NET все еще незаменимы Асинхронные методы все
- 36. Demo
- 37. Управление многопоточность Управление многопоточностью осуществляется с помощью интерфейса IScheduler var xs = Observable.Range(0, 10, Scheduler.ThreadPool); xs.Subscribe(x
- 38. Синхронизация Обновление пользовательского интерфейса Label lbl = new Label(); Form frm = new Form() {Controls =
- 39. Demo
- 40. Что мы изучили? Введение в реактивные расширения Дуализм интерфейсов Основы Rx Observable sequences Events и Observables
- 41. Experimental vs Stable Две версии библиотеки Reactive Extensions: Stable Experimental Interactive Extensions
- 42. Где взять? NuGet Web - http://msdn.microsoft.com/en-us/data/gg577610 Can’t find? Use google☺
- 43. Дополнительные ссылки The Reactive Extensions (Rx)... (Data Developer Center) - http://msdn.microsoft.com/en-us/data/gg577609 Reactive Extensions (MSDN) - http://msdn.microsoft.com/en-us/library/hh242985(v=vs.103).aspx
- 44. Roslyn CTP is awailable! http://msdn.microsoft.com/ru-ru/roslyn
- 45. Вопросы?
- 46. Горячие и холодные последовательности
- 48. Скачать презентацию