Upload
eugene-agafonov
View
1.800
Download
0
Embed Size (px)
DESCRIPTION
Примеры кода лежат на GitHub http://bit.ly/Kq6hOB Видео будет опубликовано позже
Citation preview
DevCon•12// msdevcon.ru
#msdevcon
23-24 мая, 2012 г.Microsoft
// DevCon•12
Асинхронная магия в ASP.NET MVCЕВГЕНИЙ АГАФОНОВ
@eugene_agafonov | eugeneagafonov.com
Руководитель группы веб-разработки LingvoABBYY
#msdevcon
Обзор
Асинхронное программирование в .NET
Эволюция .NETC# 1.0Управляемый код
С# 2.0Generics
С# 3.0LINQ
C# 4.0Динамическое программирование
C# 5.0async и awaitАсинхронное программирование
Зачем оно нужно?МасштабированиеПроизводительность«Быстрый» интерфейс
Асинхронное программированиеAPM BeginXXX, EndXXX, IAsyncResult
EAP XxxAsync, событие OnXxxCompleted
TPL Task<T>
.NETThread.Start() Очень дорогой объект
ThreadPool.EnqueueUserItem() Worker Thread IO Thread (IOCP)
ASP.NETIIS Свой ThreadPool IO Thread передает управление ASP.NET worker
thread
Thread starvation Если потоки будут долго работать, то пул
потоков может кончиться
#msdevcon
AsyncController
Асинхронное программирование в ASP.NET MVC 3
ASP.NET MVC 3Исходный код:http://aspnet.codeplex.com/
В MVC3 Используется EAPДействие разбивается на два метода void ActionAsync ActionResult ActionCompleted() AsyncManager
#msdevcon
Task
Асинхронное программирование в ASP.NET MVC 4
ASP.NET MVC 4 и Web APIИсходный код новой веб-платформы MS:http://aspnetwebstack.codeplex.com/
Доступно черезInstall-Package AspNetMvcInstall-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<Model> к Task<ViewResult>? TaskCompletionSource Помогает перейти от одного Task’а к другому
Счастья все равно нет Нет есть! LINQ провайдер для Task ParallelExtensions от pfx team http://blogs.msdn.com/b/pfxteam/archive/
2010/04/04/9990342.aspx LinqToTasks 3 файла
#msdevcon
Все любят волшебство и фокусы.
Время фокусов!
Фокус
А что же дальше?С# 5.0 Можно написать быстро, но не совсем
правильно Все равно сложности нас подстерегают
#msdevcon
Немного софтверной магии!
Демонстрация решения
Демонстрация
#msdevcon
ЕВГЕНИЙ АГАФОНОВ
@eugene_agafonov | eugeneagafonov.com
Руководитель группы веб-разработки LingvoABBYY
#msdevcon
Доступна сегодня на: http://vs11.ru
Новая версия Visual Studio!
Полезные материалыhttp://bradwilson.typepad.com/blog/http://blogs.msdn.com/b/pfxteam/http://blogs.msdn.com/b/pfxteam/archive/2010/04/04/9990342.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.