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

PDF
PPTX
Why we did not choose Hadoop
PDF
Максим Лапшин. Erlang production
KEY
Erlang&rails
KEY
Что и почему писать на Erlang
PPTX
мир без Jsp. thymeleaf 2.0
PDF
Erlang ruby
PDF
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
Why we did not choose Hadoop
Максим Лапшин. Erlang production
Erlang&rails
Что и почему писать на Erlang
мир без Jsp. thymeleaf 2.0
Erlang ruby
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...

What's hot (20)

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

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

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

More from SpbDotNet Community (20)

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

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