C# 5.0 : async

22

description

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

Transcript of C# 5.0 : async

Page 1: C# 5.0 :  async
Page 2: C# 5.0 :  async

DEV308

C# 5.0 : async

Иван Бодягин ABBYY

Page 3: C# 5.0 :  async

Содержание

Обзор C# 5Подробно об async

Описание проблемыПреимущества asyncДетали реализацииОбласть применения и альтернативные подходы

Page 4: C# 5.0 :  async

C# 5

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

Page 5: C# 5.0 :  async

Roslyn

CompilerPipeline

ParserSymbols

Binder IL EmitterMetadata

CompilerAPI

Syntax Tree API

Symbol API

Binding and Flow Analysis

APIEmit API

Page 6: C# 5.0 :  async

Зачем нужна асинхронность и параллелизм

Сложность приложений по прежнему растет

Закон Мура перестал приносить «Дивиденды Мура»

UI должен быть отзывчивым

Масштабируемость серверных решений

Новый API – WinRT, во многом асинхронный

Page 7: C# 5.0 :  async

Эволюция подходаРаскладывать код по потокам – рутинная работа, реализация трудночитаема

Task Parallel Library : концепция Task, Continuation Passing Style

async Позволяет реализовать логику так же как и в синхронном коде.Позволяет экономить потоки

Page 8: C# 5.0 :  async

Область приминения async

concurrency

Parallel Programming Latency

async

Page 9: C# 5.0 :  async

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

Page 10: C# 5.0 :  async

Синтаксис

async - ключевое слово перед методом содержащим асинхронные операции

Этот метод содержит асинхронные операции и будет изменен компилятором таким образом, чтобы после асинхронного вызова метод мог быть продолжен с нужного места.

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

Page 11: C# 5.0 :  async

Демонстрация

Работа async / await

Page 12: C# 5.0 :  async

Вызов асинхронного метода

Вызов asyncметод

Awaitableметод

void,TaskTask<T>

GetAwaiter() => awaiter.BeginAwait(), awaiter.EndAwait()

Page 13: C# 5.0 :  async

async, await и Task

awaitAwaiter GetAwaiter()

Awaiterbool BeginAwait()T EndAwait()

Task – асинхронность вовсе не означает параллелизм, но параллелизм означает асинхронность

Page 14: C# 5.0 :  async

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

Page 15: C# 5.0 :  async

Контекст синхронизации

await возвращает управление в «текущий контекст синхронизации»

SynchronizationContext.CurrentTaskSheduler.Current

Если SynchronizationContext определен, (ASP.Net, WPF, WinForms, SL…), то он используется и есть гарантия корректной работы с UIЕсли не определен, то берется поток из ThreadPool-а

Page 16: C# 5.0 :  async

Производительность

Сгенерированный код для поддержки асинхронности имеет свою стоимость

В некоторых сценариях эффективнее не использовать async, обладая знаниями о предметной области

Page 17: C# 5.0 :  async

Синхронное выполнение эффективнееРеализация MemoryStream

Task – можно переиспользоватьЧтение при копировании

Page 18: C# 5.0 :  async

Итогиasync позволяет создавать асинхронный, но не обязательно многопоточный код, который легко читать и поддерживать

Автоматический маршалинг в нужный контекст синхронизации

Работа с пользовательским интерфейсомWinForms, WPF, SilverLight

Экономия потоковСерверные приложения – асинхронная обработка запросов к БД, внешним ресурсам, ожидание ввода/выводаASP.NET

Page 19: C# 5.0 :  async

concurrency

Parallel Programming Latency

asyncRx

framework

TPL PLINQ

- Императивный подход

- Функциональный подход

Page 20: C# 5.0 :  async

Обратная связь

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

Спасибо!

Page 21: C# 5.0 :  async

Вопросы

DEV308 Иван Бодягин

[email protected]

Вы сможете задать вопросы докладчикам в зоне «Спроси эксперта» в течение часа после завершения этой сессии

Page 22: C# 5.0 :  async