DevCon12 // msdevcon.ru #msdevcon мая, 2012 г. Microsoft
// DevCon12 Асинхронная магия в ASP.NET MVC ЕВГЕНИЙ | eugeneagafonov.com Руководитель группы веб-разработки Lingvo ABBYY
#msdevcon Обзор Асинхронное программирование в.NET
Эволюция.NET C# 1.0 Управляемый код С# 2.0 Generics С# 3.0 LINQ C# 4.0 Динамическое программирование C# 5.0 async и await Асинхронное программирование
Зачем оно нужно? Масштабирование Производительность «Быстрый» интерфейс
Асинхронное программирование APM BeginXXX, EndXXX, IAsyncResult EAP XxxAsync, событие OnXxxCompleted TPL Task
.NET Thread.Start() Очень дорогой объект ThreadPool.EnqueueUserItem() Worker Thread IO Thread (IOCP)
ASP.NET IIS Свой ThreadPool IO Thread передает управление ASP.NET worker thread Thread starvation Если потоки будут долго работать, то пул потоков может кончиться
#msdevcon AsyncController Асинхронное программирование в ASP.NET MVC 3
ASP.NET MVC 3 Исходный код:
В MVC3 Используется EAP Действие разбивается на два метода void ActionAsync ActionResult ActionCompleted() AsyncManager
#msdevcon Task Асинхронное программирование в ASP.NET MVC 4
ASP.NET MVC 4 и Web API Исходный код новой веб-платформы MS: Доступно через Install-Package AspNetMvc Install-Package AspNetWebApi
AsyncController в MVC4 // Controller now supports asynchronous operations. // This class only exists // a) for backwards compat for callers that derive from it, // b) ActionMethodSelector can detect it to bind to // ActionAsync/ActionCompleted patterns. public abstract class AsyncController : Controller { }
Taskи тоже бывают неправильные! Task.Factory.StartNew( ()=> DoWork() ); Возвращает текущий worker thread в thread pool, и забирает еще один Имеет смысл иногда для параллельного выполнения задач, но зависит от конкретики Нужно использовать IO-bound tasks, в этом нам поможет API библиотеки классов
Что же делать? Поддержать работу с Task в MVC3 самим ActionInvoker ControllerDescriptor ActionDescriptor В сумме 4 файла, из которых только один требует усилий
#msdevcon Реально экспериментальное решение. Может падать и вываливаться с ошибками. Давайте немного похимичим! Эксперимент
Неудобно Как перейти от Task к Task ? TaskCompletionSource Помогает перейти от одного Taskа к другому
Счастья все равно нет Нет есть! LINQ провайдер для Task ParallelExtensions от pfx team aspx LinqToTasks 3 файла
#msdevcon Все любят волшебство и фокусы. Время фокусов! Фокус
А что же дальше? С# 5.0 Можно написать быстро, но не совсем правильно Все равно сложности нас подстерегают
#msdevcon Немного софтверной магии! Демонстрация решения Демонстрация
#msdevcon ЕВГЕНИЙ | eugeneagafonov.com Руководитель группы веб-разработки Lingvo ABBYY
#msdevcon Доступна сегодня на: Новая версия Visual Studio!
Полезные материалы /04/04/ aspx
Связанные сессии WEB305 Повышение производительности веб-решений WEB306 Библиотека SignalR WEB207 Новые возможности ASP.NET MVC 4
Пожалуйста Оцените доклад и мастерство докладчика. Форма для оценки находится в вашем инфопакете.
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.