octobre
2011
Dans ce billet, nous allons nous concentrer sur les contrôles asynchrones. En effet, dans cette nouvelle version d’ASP.NET MVC 4, on peut désormais utiliser des méthodes asynchrones qui renverront un objet de type Task
ou Task<ActionResult>
. Pour cela, il faut tout d’abord installer la librairie Async CTP disponible ici :
http://msdn.microsoft.com/en-US/vstudio/async
Une fois la librairie installée, on peut écrire des méthodes asynchrones en n’oubliant d’ajouter la référence suivante :
using System.Web.Mvc.Async;
L’exemple ci-dessous présente une méthode d’action synchrone qui permet d’afficher des actualités avec un contrôleur de portail :
public ActionResult News(string city) {
NewsService newsService = new NewsService();
ViewStringModel headlines = newsService.GetHeadlines(city);
return View(headlines);
}
}
Désormais, cette méthode peut être réécrite en une méthode d’action asynchrone telle que :
public void NewsAsync(string city) {
AsyncManager.OutstandingOperations.Increment();
NewsService newsService = new NewsService();
newsService.GetHeadlinesCompleted += (sender, e) =>
{
AsyncManager.Parameters["headlines"] = e.Value;
AsyncManager.OutstandingOperations.Decrement();
};
newsService.GetHeadlinesAsync(city);
}
public ActionResult NewsCompleted(string[] headlines) {
return View("News", new ViewStringModel
{
NewsHeadlines = headlines
});
}
}
Vous remarquerez que la classe PortalController ne dérive pas de Controller mais de AsyncController. En effet, AsyncController permet de traiter des méthodes synchrones et asynchrones.
La méthode News est maintenant divisé en deux méthodes (NewsAsync et NewsCompleted). La première va se charger d’initialiser le processus asynchrone tandis que la deuxième retourne une instance ActionResult.
Il faut également penser à remplacer l’appel synchrone Getheadlines par GetheadlinesAsync.
Source : http://www.jeanmichelormes.com
Articles récents
- CQLinq : Nouveautés de NDepend v4.1
- Corriger le cas du « ReplacableToken_ » obtenu dans une transformation de web.config
- Utiliser CodeDom pour se faire un compilateur
- Traduction de l’article Créer un User Control personnalisé pour Windows 8 en utilisant XAML et C# de Sébastien Pertus
- Créer une classe Tuple pour le Framework 3.5