Асинхронное программирование для самых маленьких • Что такое асинхронное программирование • История асинхронного программирования. NET • Применение async await • Асинхронность в вебе • Как выстрелить себе в ногу
Асинхронное и параллельное программирование Асинхронное программирование Вызывающий поток не дожидается окончания Чтение из портов ввода-вывода Параллельное программирование Использование нескольких ядер процессора Fork-Join aka Map. Reduce
Зачем нужен асинхронный код Desktop приложения Веб приложения Silverlight, Windows Phone, Windows 8 Любые приложения
Три модели асинхронности в. NET Asynchronous Programming Model (APM) Evented Asynchronous Programming (EAP) Task-based Asynchronous Programming (TAP)
Asynchronous Programming Model (APM) //. NET 1 model file. Begin. Read(buffer, 0, max. Length, async. Result => { int num. Bytes. Read = file. End. Read(async. Result); // Now do something with "buffer“ }, null); Microsoft не рекомендует использовать этот паттерн!
Event-based Asynchronous Programming (EAP) //. NET 2 model web. Client. Download. String. Completed += (sender, args) => { string html = args. Result; // Now do something with "html" }; web. Client. Download. String. Async(new Uri("http: //example. com")); Microsoft не рекомендует использовать этот паттерн!
Task-based Asynchronous Programming (TAP) Task html. Task = web. Client. Download. String. Task. Async(url); string html = html. Task. Result; // Sync (block until done) html. Task. Continue. With(task => { string html = task. Result; // Async, C# 4 }); string html = await html. Task; // Async, C# 5 Microsoft рекомендует использовать этот паттерн!
Как работает C# 5 “async” До компиляции public async Task My. Method() { string my. Param = "some value"; var data = await Fetch. Some. Data(my. Param); return View(data); } 1 2 После компиляции (концепт) public Task My. Method() { string my. Param = "some value"; return Fetch. Some. Data(my. Param). Continue. With(task => { var data = task. Result; return View(data); } 1 2
Демонстрация!
Synchronization Context Захватывается асинхронным кодом Используется для того, чтобы выполнить ваш колбек Имеется только у особенных потоков Windows Forms UI Thread WPF UI Thread ASP. NET Threads
IO and CPU bound operations Асинхронные вычисления, использующие процессор Поток из Thread. Pool IO bound operations Чтение или запись из устройств ввода-вывода IO Completion Port
Демонстрация!
C# 5 and Async Web Applications Evented web programming with ASP. NET
Traditional Web request handling “thread-per-request” Requests Thread pool Busy
Evented Web request handling Requests Thread pool
Демонстрация!
Как выстрелить себе в ногу Async Void Methods Нет возможности ожидать Исключения теряются Result Property Вызывающий поток блокируется Deadlock
Источники Async in C# 5 – книга Mastering Parallel Extensions – книга C#5, ASP. NET MVC 4, and asynchronous Web applications - презентация Async programming deep dive – презентация Хабр – статья, см. полезные коменты