Async PartialView导致"HttpServerUtility.Execute被阻止..."异常

Bru*_*oLM 79 c# asp.net-mvc entity-framework entity-framework-6 asp.net-mvc-5

我有一个部分视图,尝试IEnumerable<Post>使用异步从数据库中检索a ...

方法

public static class PostService
{
    public static int PostsPerPage = 50;

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
    {
        return await entityFrameworkDbContext.Posts
            .ToListAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

PartialView

public async Task<ActionResult> Recent(int page = 0)
{
    return PartialView(await PostService.GetRecentAsync(page));
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我试着打电话给它

@Html.Action("Recent", "Post")
Run Code Online (Sandbox Code Playgroud)

我得到以下异常

HttpServerUtility.Execute在等待异步操作完成时被阻塞.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.InvalidOperationException:HttpServerUtility.Execute在等待异步操作完成时被阻止.

为什么我会收到此错误?不应该工作吗?

Xen*_*ing 90

必须同步调用子操作.问题601我也不知道当前允许此功能的MVC库的最新更新.

问题601的评论,提示在MVC vNext中添加此功能,又名.MVC6.子ViewComponent视图操作看起来被替换,可以从视图中异步调用,如下所示.这里这里有完整的例子

<div>
@await Component.InvokeAsync("YourComponent")
</div>
Run Code Online (Sandbox Code Playgroud)

有关MVC6的更多信息,请访问http://www.asp.net/vnext/overview/aspnet-vnext/overview

注意:这个答案只是一种形式,所以问题可以标记为已回答


小智 5

此问题的一种解决方法是使方法按照MVC的要求进行同步,清除SynchronizationContext,调用async方法并等待结果,然后还原上下文。

在这里看到我的全部请求

  • (这篇文章似乎没有为问题提供 [质量答案](https://stackoverflow.com/help/how-to-answer)。请编辑您的答案,或将其作为对问题的评论发布)。 (4认同)