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.
Agenda Lunes, 6 febrero Entranamiento Windows Phone Intructores De laboratorio de Windows Phone Hora