비동기 PartialView로 인해 "HttpServerUtility.Execute 차단됨…"예외 발생


85

IEnumerable<Post>비동기를 사용하여 데이터베이스에서 검색하려는 부분보기가 있습니다 .

방법

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

그리고 내가 부르려고하면

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

다음 예외가 발생합니다.

비동기 작업이 완료 될 때까지 기다리는 동안 HttpServerUtility.Execute가 차단되었습니다.

설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 오류가 발생한 위치에 대한 자세한 내용은 스택 추적을 검토하십시오.

예외 정보 : System.InvalidOperationException : 비동기 작업이 완료 될 때까지 기다리는 동안 HttpServerUtility.Execute가 차단되었습니다.

이 오류가 발생하는 이유는 무엇입니까? 작동하지 않습니까?

답변:


97

자식 작업은 동 기적으로 호출되어야합니다. 문제 601 또한이 기능을 허용하는 현재 MVC 라이브러리에 대한 최근 업데이트를 알지 못합니다.

문제 601에 대한 의견은이 기능이 MVC vNext (일명)에 추가되고 있음을 암시합니다. MVC6. 하위 작업 ViewComponent은 아래와 같이 뷰에서 비동기 적으로 호출 될 수 있는 대체되는 것으로 보입니다 . 여기여기에 전체 예

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

MVC6에 대한 자세한 내용은 http://www.asp.net/vnext/overview/aspnet-vnext/overview를 확인 하십시오.

참고 :이 답변은 형식적이므로 질문을 답변으로 표시 할 수 있습니다.


601 링크는 더 이상 유효하지 않습니다
Serge

6

이 문제에 대한 해결 방법은 MVC에서 요구하는대로 메서드를 동기화하고 SynchronizationContext를 지우고 비동기 메서드를 호출하고 결과를 기다린 다음 컨텍스트를 복원하는 것입니다.

여기에서 나의 완전한 aswer 참조


3
(이 게시물은 질문에 대한 양질의 답변 을 제공하지 않는 것 같습니다 . 답변 을 수정하거나 질문에 대한 의견으로 게시하십시오).
sɐunıɔ ןɐ qɐp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.