Mejorando la experiencia en ASP.NET MVC (II)

Continuando con la serie de articulos, en esta ocacion les muestro como mejorar el codigo del anterior post, esta vez si aprovechando las caracteristicas de paralelismos y asincronismo de ASP.NET MVC.

En esta ocacion lo que voy a mostra es mismo codigo que accede a Rss Feeds, pero por alguna “extrana” razon voy a necesita consultar varios Rss, por lo tanto tenemos en nuestras manos un conjunto de procesos de alta duracion y que probablemente bloquearan tanto la interface de usuario como las peticiones al servidor web.

El codigo normal que escribiriamos es el siguiente:

1 public class Normal1Controller : Controller 2 { 3 public ActionResult Index2() 4 { 5 RssFeed feed = new RssFeed(); 6 IEnumerable<SyndicationItem> geeks = 7 feed.GetRssFeed("http://geeks.ms/blogs/MainFeed.aspx"); 8 9 IEnumerable<SyndicationItem> betters = 10 feed.GetRssFeed("http://feeds.feedburner.com/CodeBetter"); 11 12 IEnumerable<SyndicationItem> items = geeks.Concat(betters); 13 14 return View(items); 15 } 16 17 }

El codigo que mejora y aprovecha las caracteristicas asincronas del Framework 4.0, es el siguiente:

1 public class Parallel1Controller : AsyncController 2 { 3 public void Index2Async() 4 { 5 AsyncManager.OutstandingOperations.Increment(2); 6 7 RssFeed geekfeed = new RssFeed(); 8 geekfeed.GetRssFeedAsyncCompleted += (s, e) => 9 { 10 AsyncManager.Parameters["geeks"] = e.Items; 11 AsyncManager.OutstandingOperations.Decrement(); 12 }; 13 geekfeed.GetRssFeedAsync("http://geeks.ms/blogs/MainFeed.aspx"); 14 15 RssFeed betterfeed = new RssFeed(); 16 betterfeed.GetRssFeedAsyncCompleted += (s, e) => 17 { 18 AsyncManager.Parameters["betters"] = e.Items; 19 AsyncManager.OutstandingOperations.Decrement(); 20 }; 21 betterfeed.GetRssFeedAsync("http://feeds.feedburner.com/CodeBetter"); 22 } 23 24 public ActionResult Index2Completed(IEnumerable<SyndicationItem> geeks, IEnumerable<SyndicationItem> betters) 25 { 26 return View(geeks.Concat(betters)); 27 } 28 29 }

Es interesante observar como este codigo tan simple puede brindarnos mejores resultados de rendimiento.

Espero que les sea util, un abrazo.

Una respuesta a “Mejorando la experiencia en ASP.NET MVC (II)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *