비동기 PartialView로 인해 "HttpServerUtility.Execute 차단됨…"예외 발생
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가 차단되었습니다.
이 오류가 발생하는 이유는 무엇입니까? 작동하지 않습니까?
자식 작업은 동 기적으로 호출되어야합니다. 문제 601 또한이 기능을 허용하는 현재 MVC 라이브러리에 대한 최신 업데이트를 알지 못합니다.
문제 601에 대한 의견은이 기능이 MVC vNext (일명)에 추가되었음을 암시합니다. MVC6. 하위 작업 ViewComponent은 아래와 같이 뷰에서 비동기 적으로 호출 될 수 있는 대체되는 것으로 보입니다 . 여기 와 여기에 전체 예
<div>
@await Component.InvokeAsync("YourComponent")
</div>
MVC6에 대한 자세한 내용은 http://www.asp.net/vnext/overview/aspnet-vnext/overview를 확인 하십시오.
참고 :이 답변은 형식적이므로 질문을 답변으로 표시 할 수 있습니다.
이 문제에 대한 해결 방법은 MVC에서 요구하는대로 메서드를 동기화하고 SynchronizationContext를 지우고 비동기 메서드를 호출하고 결과를 기다린 다음 컨텍스트를 복원하는 것입니다.
'Program Club' 카테고리의 다른 글
| Android Play 스토어에서 데이터 가져 오기 (0) | 2020.10.12 |
|---|---|
| CreateProcess 오류 = 206, main () 메서드를 실행할 때 파일 이름 또는 확장자가 너무 깁니다. (0) | 2020.10.12 |
| FFT 출력 이해 (0) | 2020.10.12 |
| 작업 표시 줄 아래의 ProgressBar (0) | 2020.10.12 |
| JAX-RS 웹 서비스의 단위 테스트? (0) | 2020.10.12 |