Assíncrona e aguarda no controlador MVC 4
Toda vez que tento usar o novoAsync
eAwait
operadores e retornar uma coleção de objetos de um banco de dados eu recebo umInvalid Operation
exceção. Quando eu usá-lo para retornar apenas um único item, ele funciona bem.
Código do Controlador:
public async Task<ActionResult> EnvironmentList()
{
EfEnvironmentDataAccess dataAccess = new EfEnvironmentDataAccess();
ICollection<Environment> environments = await dataAccess.GetAllEnvironmentsAsync();
return PartialView(environments);
}
Ver código:
<div class="ECURightCol">
<h3>Table Dumps</h3>
@Html.Action("EnvironmentList", "Environment")
@Html.Action("ComputerList", "Computer")
@Html.Action("ProductList", "Product")
@Html.Action("InstanceList", "Instance")
@Html.Action("ProfileList", "Profile")
O Código de Acesso a Dados:
public ICollection<Environment> GetAllEnvironments()
{
using (EcuWebDataContext db = new EcuWebDataContext())
{
return db.Environments.OrderBy(e => e.Name).ToList();
}
}
public async Task<ICollection<Environment>> GetAllEnvironmentsAsync()
{
return await Task.Run(() => GetAllEnvironments());
}
O erro que recebo é:
Descrição: ocorreu uma exceção não tratada durante a execução da solicitação da web atual. Revise o rastreamento de pilha para obter mais informações sobre o erro e onde ele foi originado no código.
Detalhes da exceção: System.InvalidOperationException: HttpServerUtility.Execute bloqueado enquanto aguarda a conclusão de uma operação assíncrona.