De tudo que tem de legal planejado para acontecer no ASP.NET MVC 4, nada é tão legal quanto o tão esperado suporte a async. Eu já imaginava que a Microsoft iria integrar o Async do C# 5 nos frameworks de UI, como ASP.NET MVC e Silverlight, e aí está a primeira demonstração.
Vejam como é agora:
public void IndexAsync(string city) { AsyncManager.OutstandingOperations.Increment(2); NewsService newsService = new NewsService(); newsService.GetHeadlinesCompleted += (sender, e) => { AsyncManager.Parameters["headlines"] = e.Value; AsyncManager.OutstandingOperations.Decrement(); }; newsService.GetHeadlinesAsync(); SportsService sportsService = new SportsService(); sportsService.GetScoresCompleted += (sender, e) => { AsyncManager.Parameters["scores"] = e.Value; AsyncManager.OutstandingOperations.Decrement(); }; sportsService.GetScoresAsync(); } public ActionResult IndexCompleted(string[] headlines, string[] scores, string[] forecast) { return View("Common", new PortalViewModel { NewsHeadlines = headlines, SportsScores = scores, }); }
Vejam como vai ficar:
public async Task<ActionResult> Index(string city) { var newsService = new NewsService(); var sportsService = new SportsService(); return View("Common", new PortalViewModel { NewsHeadlines = await newsService.GetHeadlinesAsync(), SportsScores = await sportsService.GetScoresAsync() }); }
De 23 linhas para 9. E tudo paralelizado utilizando o que há de melhor no servidor, como múltiplos núcleos, HT, etc. Isso é paralelismo para as massas.
Estou pra ver algo semelhante tão simples e poderoso em outra plataforma. De fato os caras estão caminhando para o objetivo deles, que é ter a melhor plataforma para desenvolvimento web do mercado.
Saiba mais:
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.