28
DevCon•12 // msdevcon.ru #msdevcon 23-24 мая, 2012 г. Microsoft

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

Embed Size (px)

DESCRIPTION

Примеры кода лежат на GitHub http://bit.ly/Kq6hOB Видео будет опубликовано позже

Citation preview

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

DevCon•12// msdevcon.ru

#msdevcon

23-24 мая, 2012 г.Microsoft

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

// DevCon•12

Асинхронная магия в ASP.NET MVCЕВГЕНИЙ АГАФОНОВ

@eugene_agafonov | eugeneagafonov.com

Руководитель группы веб-разработки LingvoABBYY

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

#msdevcon

Обзор

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

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

Эволюция .NETC# 1.0Управляемый код

С# 2.0Generics

С# 3.0LINQ

C# 4.0Динамическое программирование

C# 5.0async и awaitАсинхронное программирование

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

Зачем оно нужно?МасштабированиеПроизводительность«Быстрый» интерфейс

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

Асинхронное программированиеAPM BeginXXX, EndXXX, IAsyncResult

EAP XxxAsync, событие OnXxxCompleted

TPL Task<T>

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

.NETThread.Start() Очень дорогой объект

ThreadPool.EnqueueUserItem() Worker Thread IO Thread (IOCP)

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

ASP.NETIIS Свой ThreadPool IO Thread передает управление ASP.NET worker

thread

Thread starvation Если потоки будут долго работать, то пул

потоков может кончиться

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

#msdevcon

AsyncController

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

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

ASP.NET MVC 3Исходный код:http://aspnet.codeplex.com/

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

В MVC3 Используется EAPДействие разбивается на два метода void ActionAsync ActionResult ActionCompleted() AsyncManager

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

#msdevcon

Task

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

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

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

Доступно черезInstall-Package AspNetMvcInstall-Package AspNetWebApi

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

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{}

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

Task’и тоже бывают неправильные!Task.Factory.StartNew( ()=> DoWork() ); Возвращает текущий worker thread в thread

pool, и забирает еще один Имеет смысл иногда для параллельного

выполнения задач, но зависит от конкретики

Нужно использовать IO-bound tasks, в этом нам поможет API библиотеки классов

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

Что же делать?Поддержать работу с Task в MVC3 самим ActionInvoker ControllerDescriptor ActionDescriptor В сумме 4 файла, из которых только один

требует усилий

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

#msdevcon

Реально экспериментальное решение. Может падать и вываливаться с ошибками.

Давайте немного похимичим!

Эксперимент

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

НеудобноКак перейти от Task<Model> к Task<ViewResult>? TaskCompletionSource Помогает перейти от одного Task’а к другому

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

Счастья все равно нет Нет есть! LINQ провайдер для Task ParallelExtensions от pfx team http://blogs.msdn.com/b/pfxteam/archive/

2010/04/04/9990342.aspx LinqToTasks 3 файла

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

#msdevcon

Все любят волшебство и фокусы.

Время фокусов!

Фокус

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

А что же дальше?С# 5.0 Можно написать быстро, но не совсем

правильно Все равно сложности нас подстерегают

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

#msdevcon

Немного софтверной магии!

Демонстрация решения

Демонстрация

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

#msdevcon

ЕВГЕНИЙ АГАФОНОВ

@eugene_agafonov | eugeneagafonov.com

Руководитель группы веб-разработки LingvoABBYY

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

#msdevcon

Доступна сегодня на: http://vs11.ru

Новая версия Visual Studio!

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

Полезные материалыhttp://bradwilson.typepad.com/blog/http://blogs.msdn.com/b/pfxteam/http://blogs.msdn.com/b/pfxteam/archive/2010/04/04/9990342.aspx

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

Связанные сессииWEB305

Повышение производительности веб-решенийWEB306Библиотека SignalR

WEB207 Новые возможности ASP.NET MVC 4

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

ПожалуйстаОцените доклад и мастерство докладчика.Форма для оценки находится в вашем инфопакете.

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

© 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.