Async PartialView provoque une exception «HttpServerUtility.Execute bloquée…»

J’ai une vue partielle qui essaye de récupérer un IEnumerable de la firebase database en utilisant async …

Méthode

 public static class PostService { public static int PostsPerPage = 50; public static async Task<IEnumerable> GetRecentAsync(int page = 0) { return await entityFrameworkDbContext.Posts .ToListAsync(); } } 

Vue partielle

 public async Task Recent(int page = 0) { return PartialView(await PostService.GetRecentAsync(page)); } 

Et puis si j’essaye de l’appeler

 @Html.Action("Recent", "Post") 

Je reçois l’exception suivante

HttpServerUtility.Execute bloqué en attendant qu’une opération asynchrone se termine.

Description: une exception non gérée s’est produite lors de l’exécution de la demande Web en cours. Consultez la trace de la stack pour plus d’informations sur l’erreur et son origine dans le code.

Détails de l’exception: System.InvalidOperationException: HttpServerUtility.Execute bloqué en attendant qu’une opération asynchrone se termine.

Pourquoi est-ce que je reçois cette erreur? Ça ne devrait pas marcher?

Les actions enfants doivent être appelées de manière synchrone. Problème 601 Je ne connais pas non plus de mises à jour récentes des bibliothèques MVC actuelles permettant cette fonctionnalité.

Un commentaire sur le problème 601, qui fait allusion à l’ajout de cette fonctionnalité dans MVC vNext, aka. MVC6. Les actions enfants semblent être remplacées par ViewComponent qui peut être ViewComponent manière asynchrone dans une vue ci-dessous. Exemples complets ici et ici

 
@await Component.InvokeAsync("YourComponent")

Pour plus d’informations sur MVC6, consultez http://www.asp.net/vnext/overview/aspnet-vnext/overview

Note: Cette réponse est juste une formalité, donc la question peut être marquée comme une réponse

Une solution de contournement à ce problème consiste à rendre la méthode synchrone, comme requirejs par MVC, à effacer le SynchronizationContext, à appeler la méthode async et à attendre le résultat, puis à restaurer le contexte.

voir ma réponse complète ici