Async PartialView causes “HttpServerUtility.Exécuter bloqué...” exception
J'ai une vue partielle qui tente de récupérer un IEnumerable<Post>
à partir de la base de données à l'aide asynchrone...
Méthode
public static class PostService
{
public static int PostsPerPage = 50;
public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
{
return await entityFrameworkDbContext.Posts
.ToListAsync();
}
}
PartialView
public async Task<ActionResult> Recent(int page = 0)
{
return PartialView(await PostService.GetRecentAsync(page));
}
Et puis si j'essaie de l'appeler
@Html.Action("Recent", "Post")
- Je obtenir de l'exception suivante
HttpServerUtility.Exécuter bloquée en attente d'une opération asynchrone à compléter.
Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle a son origine dans le code.
Détails De L'Exception: System.InvalidOperationException: HttpServerUtility.Exécuter bloquée en attente d'une opération asynchrone à compléter.
Pourquoi j'ai cette erreur? Ne devrait-elle pas de travail?
Vous devez vous connecter pour publier un commentaire.
De l'enfant, des mesures doivent être invoquée de manière synchrone. Question 601 Je suis pas au courant de toutes les dernières mises à jour de l'actuel MVC bibliothèques permettant cette fonctionnalité.
Un commentaire sur la Question 601, conseils de à cette fonctionnalité a été ajoutée en MVC vNext, aka. MVC6. Enfant des actions de chercher à être remplacé par
ViewComponent
qui peut être appelée de façon asynchrone à partir d'une vue en tant que ci-dessous. Des exemples complets ici et iciPour en savoir plus sur MVC6 découvrez, http://www.asp.net/vnext/overview/aspnet-vnext/overview
Note: Cette réponse n'est qu'une formalité, de sorte que la question peut être marqué comme réponse à
Une solution de contournement pour ce problème consiste à faire de la méthode synchronious tel que requis par la MVC, désactivez la SynchronizationContext, appelez la méthode async et d'attendre le résultat, puis restaurer le contexte.
voir mon aswer ici