53

ich eine Teilansicht, die eine IEnumerable<Post> aus der Datenbank mit Asynchron abzurufen versucht ...Async PartialView verursacht "HttpServerUtility.Execute blockiert ..." Ausnahme

Methode

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)); 
} 

Und dann, wenn ich versuche, es zu nennen

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

Ich erhalte die folgende Ausnahme

HttpServerUtility.Execute blockiert, während für einen asynchronen Betrieb warten zu vervollständigen.

Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt.

Ausnahmedetails: System.InvalidOperationException: HttpServerUtility.Execute blockiert, während auf den Abschluss eines asynchronen Vorgangs gewartet wird.

Warum bekomme ich diesen Fehler? Sollte es nicht funktionieren?

Antwort

69

Untergeordnete Aktionen müssen synchron aufgerufen werden. Issue 601 Mir sind auch keine aktuellen Aktualisierungen der aktuellen MVC-Bibliotheken bekannt, die diese Funktionalität ermöglichen.

Ein Kommentar zu Issue 601, Hinweise auf diese Funktion hinzugefügt in MVC vNext, aka. MVC6. Untergeordnete Aktionen werden durch ViewComponent ersetzt, die asynchron aus einer Ansicht wie folgt aufgerufen werden können. Vollständige Beispiele here und here

<div> 
@await Component.InvokeAsync("YourComponent") 
</div> 

Weitere Informationen über MVC6 Check-out, http://www.asp.net/vnext/overview/aspnet-vnext/overview

Hinweis: Diese Antwort ist nur eine Formalität, so kann die Frage markiert werden als beantwortet

Verwandte Themen