SlideShare a Scribd company logo
async/await и все, что вы боялись
спросить
Гришечко Егор
CodeBeavers
О чем буду разглагольствовать
• Обосную, зачем этот доклад нужен
• Немного основ
• Копнем вглубь StateMachine
• Копнём вглубь контекстов и всего, что с ними связано
• Поумилияемся .NET Core
• Расскажу пару примеров из жизни
• Поспорим про паттерны и подходы
2
Зачем нам нужна асинхронность?
3
Зачем это нужно на сервере?
4https://docs.microsoft.com/en-us/dotnet/standard/async-in-depth?
Немногие основы
5
• Асинхронное программирование – стиль программирование, в котором
основной поток выполнения не блокируется. А выполнение кода превращается
из последовательного в поток обратных вызовов (call back).
Как было?
• Asynchronous Programming Model (BeginOperationName/EndOperationName)
• Event-based Asynchronous Programming (OperationNameAsync()/OperationNameCompleted)
• Task-base Asynchronous Pattern (TAP) (async/await и Task/Task<T>)
Как стало?
Поехали 
6
Как работает (синхронное)
Поток заблокировался
7
Как работает (aсинхронное)
Возвращает управление
8
9
Поехали?
10
А что с Core?
Вниз, к центру стэйт машины
11
12
Вниз, к центру стэйт машины
13
Совсем упростим
14
SynchronizationContext – это важно
15
Веселая задачка
16
17
Нам нужно на следующий уровень (Демо)
18
19
ExecutionContext – это тоже важно
20
ExecutionContext
21
ExecutionContext
22
https://weblogs.asp.net/dixin/understanding-c-sharp-async-await-3-runtime-context
SynchronizationContext
23
SynchronizationContext
24
Веселая задачка №2
25
26
AspNetSynchronizationContext
Мы же в 2к17
27
Упс…
28
29
Немного опыта
30
Похоливарим
• Не стоит оборачивать синхронный код в асинхронный
• Не стоит оборачивать асинхронный код в синхронный
31
https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-methods/
https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/
https://docs.microsoft.com/en-us/dotnet/csharp/async
?
Что почитать?(книги)
32
Что еще?
• https://weblogs.asp.net/dixin/understanding-c-sharp-async-await-1-compilation - кратко и
обо всем
• https://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html – (Stephen
Cleary)
• https://blogs.msdn.microsoft.com/pfxteam/ - команда отвечающая за async/await
• https://codeblog.jonskeet.uk/2011/05/08/eduasync-part-1-introduction/ - Jon Skeet
• http://vegetarianprogrammer.blogspot.ru/2012/12/understanding-synchronizationcontext-
in.html - хорошая статья про контексты
• https://msdn.microsoft.com/en-us/magazine/gg598924.aspx - еще статья про контекст
• https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-
synchronizationcontext/ - ExecutionContext vs SynchronizationContext
• https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-
wrappers-for-synchronous-methods/ - нужно ли оборачивать синхронное в асинхронное
• https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-
wrappers-for-asynchronous-methods/ - нужно ли оборачивать синхронное в асинхронное
Статьи
33
Что еще?
Видео
• https://www.youtube.com/watch?v=lh8cT6qI-nA – Андрей Часовских — Async/await:
собираем грабли
• https://channel9.msdn.com/Events/aspConf/aspConf/Async-in-ASP-NET - async в ASP.NET
• https://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-829T - The zen of async: Best
practices for best performance
• https://channel9.msdn.com/Series/Three-Essential-Tips-for-Async - Six Essential Tips
for Async
• https://channel9.msdn.com/Series/Three-Essential-Tips-for-Async - Tip 4: Async Library
Methods Shouldn't Lie
34
Минутка тщеславия 
Большое спасибо за внимание!
Ссылки:
• https://github.com/egorikas/SpbDotNet - презентация и примеры
• egorikas.com – мой блог
• egorgrishechko@gmail.com
35

More Related Content

What's hot (20)

PDF
Erlang мгновенное просветление
Maxim Sokhatsky
 
PDF
Erlang railsclub - 1
Max Lapshin
 
KEY
Отличие Erlang от объектных языков
Max Lapshin
 
PPTX
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
 
PDF
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON
 
KEY
Erlang for Yandex
Max Lapshin
 
PDF
Опыт использования Erlang в разработке многопользовательской игры
Yuri Zhloba
 
PDF
Максим Лапшин — введение в Erlang
Александр Ежов
 
PDF
Демонизированный PHP - before it was cool
Andrey Tokarchuk
 
PPT
Highload2009 Rybak Badoo Os
HighLoad2009
 
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
ODP
Top10 доводов против языка Ruby
guest5f907e
 
PDF
Алексей Иванкин: Highload + PHP
Oleg Poludnenko
 
PDF
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
Ontico
 
PPTX
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 
PDF
Алексей Туля - А нужен ли вам erlang?
Minsk Linux User Group
 
PDF
Алексей Федоров
CodeFest
 
PDF
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
PDF
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
 
Erlang мгновенное просветление
Maxim Sokhatsky
 
Erlang railsclub - 1
Max Lapshin
 
Отличие Erlang от объектных языков
Max Lapshin
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON
 
Erlang for Yandex
Max Lapshin
 
Опыт использования Erlang в разработке многопользовательской игры
Yuri Zhloba
 
Максим Лапшин — введение в Erlang
Александр Ежов
 
Демонизированный PHP - before it was cool
Andrey Tokarchuk
 
Highload2009 Rybak Badoo Os
HighLoad2009
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
Top10 доводов против языка Ruby
guest5f907e
 
Алексей Иванкин: Highload + PHP
Oleg Poludnenko
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
Ontico
 
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 
Алексей Туля - А нужен ли вам erlang?
Minsk Linux User Group
 
Алексей Федоров
CodeFest
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
 

Similar to Егор Гришечко «Async/Await и всё, что вы боялись спросить» (14)

PPTX
async/await: собираем грабли
Andrey Chasovskikh
 
PPTX
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
PDF
Wild Async .NET world: AID Kit for boy-scouts
HYS Enterprise
 
PDF
Киллер-фича языка C# — конструкция async/await
Byndyusoft
 
PDF
Иван Пузыревский — Введение в асинхронное программирование
Yandex
 
PPT
Тонкости асинхронного программирования
Sergey Teplyakov
 
PPTX
Асинхронные вызовы в .NET
Bonart
 
PPTX
Асинхронное программирование в ASP.NET MVC
Eugene Agafonov
 
PDF
!sync - асинхронное взаимодействие, Вячеслав Турчанинов (Ratengoods.com)
Ontico
 
PPT
C# 5.0. Взгляд в будущее
GetDev.NET
 
PDF
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
PPTX
Async
Kiev ALT.NET
 
PPTX
Luxoft async.net
Sergey Teplyakov
 
PPTX
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
async/await: собираем грабли
Andrey Chasovskikh
 
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Wild Async .NET world: AID Kit for boy-scouts
HYS Enterprise
 
Киллер-фича языка C# — конструкция async/await
Byndyusoft
 
Иван Пузыревский — Введение в асинхронное программирование
Yandex
 
Тонкости асинхронного программирования
Sergey Teplyakov
 
Асинхронные вызовы в .NET
Bonart
 
Асинхронное программирование в ASP.NET MVC
Eugene Agafonov
 
!sync - асинхронное взаимодействие, Вячеслав Турчанинов (Ratengoods.com)
Ontico
 
C# 5.0. Взгляд в будущее
GetDev.NET
 
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
Luxoft async.net
Sergey Teplyakov
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Sergey Platonov
 
Ad

More from SpbDotNet Community (20)

PPTX
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
 
PPTX
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
 
PDF
Константин Васильев «Fody против рутины»
SpbDotNet Community
 
PDF
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
SpbDotNet Community
 
PDF
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
PDF
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
SpbDotNet Community
 
PDF
Игорь Лабутин «Коллекционируем данные в .NET»
SpbDotNet Community
 
PDF
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
SpbDotNet Community
 
PDF
Артём Акуляков - F# for Data Analysis
SpbDotNet Community
 
PPTX
Анатолий Кулаков «The Metrix has you…»
SpbDotNet Community
 
PPTX
Роман Неволин «Провайдеры типов без боли и магии»
SpbDotNet Community
 
PDF
Дмитрий Верескун «Синтаксический сахар C#»
SpbDotNet Community
 
PDF
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
SpbDotNet Community
 
PDF
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
SpbDotNet Community
 
PDF
Алексей Мерсон «Domain Driven Design: профит малой кровью»
SpbDotNet Community
 
PPTX
Михаил Щербаков «Что может быть проще: делегаты и события»
SpbDotNet Community
 
PDF
Никита Каменский «Есть ли жизнь с UWP?»
SpbDotNet Community
 
PPTX
Александр Кугушев «Roslyn: очевидные неочевидности»
SpbDotNet Community
 
PPTX
ДотаНетоЛогия: СПб 2017
SpbDotNet Community
 
PDF
Юрий Волков «VM via F#»
SpbDotNet Community
 
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
 
Константин Васильев «Fody против рутины»
SpbDotNet Community
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
SpbDotNet Community
 
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
SpbDotNet Community
 
Игорь Лабутин «Коллекционируем данные в .NET»
SpbDotNet Community
 
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
SpbDotNet Community
 
Артём Акуляков - F# for Data Analysis
SpbDotNet Community
 
Анатолий Кулаков «The Metrix has you…»
SpbDotNet Community
 
Роман Неволин «Провайдеры типов без боли и магии»
SpbDotNet Community
 
Дмитрий Верескун «Синтаксический сахар C#»
SpbDotNet Community
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
SpbDotNet Community
 
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
SpbDotNet Community
 
Алексей Мерсон «Domain Driven Design: профит малой кровью»
SpbDotNet Community
 
Михаил Щербаков «Что может быть проще: делегаты и события»
SpbDotNet Community
 
Никита Каменский «Есть ли жизнь с UWP?»
SpbDotNet Community
 
Александр Кугушев «Roslyn: очевидные неочевидности»
SpbDotNet Community
 
ДотаНетоЛогия: СПб 2017
SpbDotNet Community
 
Юрий Волков «VM via F#»
SpbDotNet Community
 
Ad

Егор Гришечко «Async/Await и всё, что вы боялись спросить»