1 / 22

C# 5.0 : async

DEV308. ABBYY. C# 5.0 : async. Иван Бодягин. Содержание. Обзор C# 5 Подробно об async Описание проблемы Преимущества async Детали реализации Область применения и альтернативные подходы. C# 5. C# 5.0 == async Разработчики устали от частого внесения нового функционала

ulla
Download Presentation

C# 5.0 : async

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. DEV308 ABBYY C# 5.0 : async Иван Бодягин

  2. Содержание • Обзор C# 5 • Подробно об async • Описание проблемы • Преимущества async • Детали реализации • Область применения и альтернативные подходы

  3. C# 5 • C# 5.0 == async • Разработчики устали от частого внесения нового функционала • Изменения в компиляторе требуют поддержки студии, которая тоже активно меняется • Новая версия компилятора реализуется на C#

  4. Roslyn Parser Symbols Binder IL Emitter Compiler Pipeline Metadata Syntax Tree API Symbol API Binding and Flow Analysis API Emit API Compiler API

  5. Зачем нужна асинхронность и параллелизм • Сложность приложений по прежнему растет • Закон Мура перестал приносить «Дивиденды Мура» • UI должен быть отзывчивым • Масштабируемость серверных решений • Новый API – WinRT, во многом асинхронный

  6. Эволюция подхода • Раскладывать код по потокам – рутинная работа, реализация трудночитаема • Task Parallel Library: концепция Task, Continuation Passing Style • async • Позволяет реализовать логику так же как и в синхронном коде. • Позволяет экономить потоки

  7. Область приминения async concurrency Parallel Programming Latency async

  8. Как это работает

  9. Синтаксис • async- ключевое слово перед методом содержащим асинхронные операции • Этот метод содержит асинхронные операции и будет изменен компилятором таким образом, чтобы после асинхронного вызова метод мог быть продолжен с нужного места. • await– ключевое слово перед асинхронной операцией • Остаток метода сделать «продолжением» (continuation) и вернуть управление вызывающему потоку. «продолжение» будет вызвано тогда, когда ожидаемый вызов завершится.

  10. Работа async / await Демонстрация

  11. Вызов асинхронного метода Вызов async метод Awaitable метод void, Task Task<T> GetAwaiter() => awaiter.BeginAwait(), awaiter.EndAwait()

  12. async, awaitи Task • await • AwaiterGetAwaiter() • Awaiter • boolBeginAwait() • T EndAwait() • Task – асинхронность вовсе не означает параллелизм, но параллелизм означает асинхронность

  13. Преобразования компилятора

  14. Контекст синхронизации • await возвращает управление в «текущий контекст синхронизации» • SynchronizationContext.Current • TaskSheduler.Current • Если SynchronizationContextопределен, (ASP.Net, WPF, WinForms, SL…), то он используется и есть гарантия корректной работы с UI • Если не определен, то берется поток из ThreadPool-а

  15. Производительность • Сгенерированный код для поддержки асинхронности имеет свою стоимость • В некоторых сценариях эффективнее не использовать async, обладая знаниями о предметной области

  16. Синхронное выполнение эффективнее • Реализация MemoryStream • Task – можно переиспользовать • Чтение при копировании

  17. Итоги • asyncпозволяет создавать асинхронный, но не обязательно многопоточный код, который легко читать и поддерживать • Автоматический маршалинг в нужный контекст синхронизации • Работа с пользовательским интерфейсом • WinForms, WPF, SilverLight • Экономия потоков • Серверные приложения – асинхронная обработка запросов к БД, внешним ресурсам, ожидание ввода/вывода • ASP.NET

  18. concurrency Parallel Programming Latency TPL PLINQ async Rx framework • Императивный подход • Функциональный подход

  19. Обратная связь Уважаемые участники! Ваше мнение очень важно для нас! В блокноте, который находится в инфопаке участника, вы найдете анкету для оценки докладов Пожалуйста, оцените доклад и сдайте анкету при выходе из зала модератору Для участия в конкурсе заполненных анкет, отметьте в анкете номер, который указан на вашем бейдже Спасибо!

  20. Вопросы • DEV308 • Иван Бодягин • ABBYY • Ivan_B@abbyy.com • Вы сможете задать вопросы докладчикам в зоне «Спроси эксперта» в течение часа после завершения этой сессии

More Related