C# 异步部分视图原因“;HttpServerUtility.Execute blocked…“;例外
我有一个局部视图,它试图使用异步从数据库检索C# 异步部分视图原因“;HttpServerUtility.Execute blocked…“;例外,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,我有一个局部视图,它试图使用异步从数据库检索IEnumerable 方法 public static class PostService { public static int PostsPerPage = 50; public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0) { return await entityFrameworkDbCont
IEnumerable
方法
public static class PostService
{
public static int PostsPerPage = 50;
public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
{
return await entityFrameworkDbContext.Posts
.ToListAsync();
}
}
我得到以下例外
HttpServerUtility。在等待异步操作完成时阻止执行
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源
异常详细信息:System.InvalidOperationException:HttpServerUtility。在等待异步操作完成时阻止执行
为什么会出现这个错误?它不应该工作吗?必须同步调用子操作。我也不知道当前MVC库最近有任何允许此功能的更新 关于问题601的评论暗示了MVC vNext(又名MVC vNext)中添加了此功能。MVC6。子操作看起来将替换为
ViewComponent
,可以从如下视图异步调用。完整示例和
@wait Component.InvokeAsync(“YourComponent”)
有关MVC6的更多信息,请查看
注意:此回答只是一种形式,因此问题可以标记为已回答。此问题的解决方法是按照MVC的要求使方法同步,清除SynchronizationContext,调用async方法并等待结果,然后恢复上下文
请参阅我的完整答案(此帖子似乎没有提供问题的答案。请编辑您的答案,或将其作为问题的注释发布)。601链接不再有效
public async Task<ActionResult> Recent(int page = 0)
{
return PartialView(await PostService.GetRecentAsync(page));
}
@Html.Action("Recent", "Post")
<div>
@await Component.InvokeAsync("YourComponent")
</div>