У меня есть частичное представление, которое пытается получить 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 заблокирован во время ожидания завершения асинхронной операции.
Почему я получаю эту ошибку? Разве это не должно работать?
Обходной путь для этой проблемы - сделать метод синхронным, как того требует MVC, очистить SynchronizationContext, вызвать асинхронный метод и дождаться результата, а затем восстановить контекст.
см. мой полный ответ здесь
источник