SlideShare une entreprise Scribd logo
1  sur  28
DevCon•12
// msdevcon.ru

23-24 мая, 2012 г.
Microsoft




                     #msdevcon
Асинхронная магия в
ASP.NET MVC                                 // DevCon•12

ЕВГЕНИЙ АГАФОНОВ
Руководитель группы веб-разработки Lingvo
ABBYY
@eugene_agafonov | eugeneagafonov.com
Асинхронное
программирование в .NET
Обзор




                          #msdevcon
Эволюция .NET
C# 1.0            C# 4.0
Управляемый код   Динамическое
                  программирование

С# 2.0
Generics          C# 5.0
                  async и await
С# 3.0            Асинхронное
LINQ              программирование
Зачем оно нужно?
Масштабирование
Производительность
«Быстрый» интерфейс
Асинхронное программирование
APM
BeginXXX, EndXXX, IAsyncResult
EAP
XxxAsync, событие OnXxxCompleted
TPL
Task<T>
.NET
Thread.Start()
Очень дорогой объект
ThreadPool.EnqueueUserItem()
Worker Thread
IO Thread (IOCP)
ASP.NET
IIS
Свой ThreadPool
IO Thread передает управление ASP.NET worker thread
Thread starvation
Если потоки будут долго работать, то пул потоков
 может кончиться
Асинхронное
программирование в
ASP.NET MVC 3
AsyncController




                     #msdevcon
ASP.NET MVC 3
Исходный код:
http://aspnet.codeplex.com/
В MVC3 Используется EAP
Действие разбивается на два метода
void ActionAsync
ActionResult ActionCompleted()
AsyncManager
Асинхронное
программирование в
ASP.NET MVC 4
Task




                     #msdevcon
ASP.NET MVC 4 и Web API
Исходный код новой веб-платформы MS:
http://aspnetwebstack.codeplex.com/


Доступно через
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<Model> к
Task<ViewResult>?
TaskCompletionSource
Помогает перейти от одного Task’а к другому
Счастья все равно нет 
Нет есть!  LINQ провайдер для Task
ParallelExtensions от pfx team
http://blogs.msdn.com/b/pfxteam/archive/2010/04/04/9
 990342.aspx
LinqToTasks
3 файла
Время фокусов!
Все любят волшебство и фокусы.
                                 Фокус




                                         #msdevcon
А что же дальше?
С# 5.0
Можно написать быстро, но не совсем правильно
Все равно сложности нас подстерегают 
Демонстрация решения
Немного софтверной магии!
                            Демонстрация




                                           #msdevcon
ЕВГЕНИЙ АГАФОНОВ
Руководитель группы веб-разработки Lingvo
ABBYY


@eugene_agafonov | eugeneagafonov.com




                                            #msdevcon
Новая версия Visual Studio!
Доступна сегодня на: http://vs11.ru




                                      #msdevcon
Полезные материалы
http://bradwilson.typepad.com/blog/
http://blogs.msdn.com/b/pfxteam/
http://blogs.msdn.com/b/pfxteam/archive/201
0/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.

Contenu connexe

Tendances

"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik HimiranovFwdays
 
DEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого стартаDEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого стартаSasha Soleev
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17OdessaFrontend
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел СташевскийDevDay
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 
Headless Drupal на примере Drupal 8 и React
Headless Drupal на примере Drupal 8 и ReactHeadless Drupal на примере Drupal 8 и React
Headless Drupal на примере Drupal 8 и ReactDrupalSPB
 
FitNesse+PowerSlim on Windows
FitNesse+PowerSlim on WindowsFitNesse+PowerSlim on Windows
FitNesse+PowerSlim on WindowsMaxim Shulga
 
Visual Studio Team Services /TFS helps doing devops
Visual Studio Team Services /TFS helps doing devops Visual Studio Team Services /TFS helps doing devops
Visual Studio Team Services /TFS helps doing devops Konstantin Neradovsky
 
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...JSC “Arcadia Inc”
 
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"Fwdays
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium SQALab
 
Автоматизация тестирования - это пот, кровь и слезы
Автоматизация тестирования - это пот, кровь и слезы Автоматизация тестирования - это пот, кровь и слезы
Автоматизация тестирования - это пот, кровь и слезы Maxim Shulga
 
End-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализацияEnd-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализацияSQALab
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиковITCrowd Almaty
 
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...EPAM Systems
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Fwdays
 

Tendances (20)

"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
 
DEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого стартаDEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого старта
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
Headless Drupal на примере Drupal 8 и React
Headless Drupal на примере Drupal 8 и ReactHeadless Drupal на примере Drupal 8 и React
Headless Drupal на примере Drupal 8 и React
 
FitNesse+PowerSlim on Windows
FitNesse+PowerSlim on WindowsFitNesse+PowerSlim on Windows
FitNesse+PowerSlim on Windows
 
Visual Studio Team Services /TFS helps doing devops
Visual Studio Team Services /TFS helps doing devops Visual Studio Team Services /TFS helps doing devops
Visual Studio Team Services /TFS helps doing devops
 
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
 
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
 
Автоматизация тестирования - это пот, кровь и слезы
Автоматизация тестирования - это пот, кровь и слезы Автоматизация тестирования - это пот, кровь и слезы
Автоматизация тестирования - это пот, кровь и слезы
 
ховатти светлана
ховатти светланаховатти светлана
ховатти светлана
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
End-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализацияEnd-2-End UI автоматизация в мобильном приложении. Наша реализация
End-2-End UI автоматизация в мобильном приложении. Наша реализация
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
 
It is a Test
It is a TestIt is a Test
It is a Test
 

Similaire à Асинхронное программирование в ASP.NET MVC

Dotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingDotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingCiklum Ukraine
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''DneprCiklumEvents
 
Аспектно-ориентированное программирование (АОП) на примере PostSharp
Аспектно-ориентированное программирование (АОП) на примере PostSharpАспектно-ориентированное программирование (АОП) на примере PostSharp
Аспектно-ориентированное программирование (АОП) на примере PostSharpOlga Lavrentieva
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextGoSharp
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Fwdays
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5Microsoft
 
Основи використання MVC
Основи використання MVCОснови використання MVC
Основи використання MVCIgor Bronovskyy
 
Backbone js for expert fridays.pptx
Backbone js for  expert fridays.pptxBackbone js for  expert fridays.pptx
Backbone js for expert fridays.pptxProvectus
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupИгорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupAlina Vilk
 
начинаем работать с Sql server compact
начинаем работать с Sql server compactначинаем работать с Sql server compact
начинаем работать с Sql server compactДенис Резник
 
Разработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkРазработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkCUSTIS
 

Similaire à Асинхронное программирование в ASP.NET MVC (20)

Dotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingDotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffolding
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''
 
Аспектно-ориентированное программирование (АОП) на примере PostSharp
Аспектно-ориентированное программирование (АОП) на примере PostSharpАспектно-ориентированное программирование (АОП) на примере PostSharp
Аспектно-ориентированное программирование (АОП) на примере PostSharp
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
 
Middleware
MiddlewareMiddleware
Middleware
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5
 
Основи використання MVC
Основи використання MVCОснови використання MVC
Основи використання MVC
 
Backbone js for expert fridays.pptx
Backbone js for  expert fridays.pptxBackbone js for  expert fridays.pptx
Backbone js for expert fridays.pptx
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupИгорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
 
начинаем работать с Sql server compact
начинаем работать с Sql server compactначинаем работать с Sql server compact
начинаем работать с Sql server compact
 
Разработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring FrameworkРазработка Enterprise-приложения на основе Spring Framework
Разработка Enterprise-приложения на основе Spring Framework
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 

Асинхронное программирование в ASP.NET MVC