Async PartialView вызывает исключение "HttpServerUtility.Execute blocked..."
У меня есть частичный вид, который пытается извлечь IEnumerable<Post>
из базы данных с помощью async...
Метод
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 заблокировано, ожидая завершения асинхронной операции.
Почему я получаю эту ошибку? Не должно ли это работать?
Ответы
Ответ 1
Действия ребенка должны выполняться синхронно. Проблема 601 Я также не знаю недавних обновлений текущих библиотек MVC, разрешающих эту функциональность.
Комментарий к выпуску 601, намекает на добавление этой функциональности в MVC vNext, ака. MVC6. Действия с дочерними элементами выглядят заменяемыми на ViewComponent
, которые можно асинхронно вызывать из представления, как показано ниже. Полный примеры здесь и здесь
<div>
@await Component.InvokeAsync("YourComponent")
</div>
Подробнее о MVC6, http://www.asp.net/vnext/overview/aspnet-vnext/overview
Примечание. Этот ответ является просто формальностью, поэтому вопрос может быть отмечен как ответ