53

Mam częściowego widoku, który próbuje odzyskać IEnumerable<Post> z bazy danych za pomocą async ...asynchroniczny PartialView powoduje "HttpServerUtility.Execute zablokowany ..." wyjątek

Method

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

A potem, gdy próbuję go

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

otrzymuję następujący wyjątek

HttpServerUtility.Execute zablokowanego czekając na asynchronicznej operacji do wykonania.

Opis: Wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania WWW. Sprawdź ślad stosu, aby uzyskać więcej informacji o błędzie i skąd pochodzi w kodzie.

Szczegóły wyjątku: System.InvalidOperationException: HttpServerUtility.Exutute zablokowany podczas oczekiwania na zakończenie operacji asynchronicznej.

Dlaczego pojawia się ten błąd? Czy to nie powinno działać?

Odpowiedz

69

Akcje dziecka należy wywoływać synchronicznie. Issue 601 Nie mam również informacji o żadnych najnowszych aktualizacjach aktualnych bibliotek MVC zezwalających na tę funkcję.

Komentarz do wydania 601, wskazówki do dodania tej funkcji w MVC vNext, aka. MVC6. Działania podrzędne powinny zostać zastąpione przez ViewComponent, które można wywoływać asynchronicznie z widoku, jak poniżej. Pełne przykłady here i here

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

Więcej o MVC6 sprawdzić, http://www.asp.net/vnext/overview/aspnet-vnext/overview

Uwaga: Ta odpowiedź jest tylko formalnością, więc pytanie może być oznaczone jako odpowiedziało

Powiązane problemy