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

Preview:

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.

Recommended