Question: Every time I try to use the new `Async` and `Await` operators and return a collection of objects from a database I get an `Invalid Operation` exception. When I use it to only return a single Item it works fine.

Controller Code:

```
public async Task<ActionResult> EnvironmentList()
{
    EfEnvironmentDataAccess dataAccess = new EfEnvironmentDataAccess();
    ICollection<Environment> environments = await dataAccess.GetAllEnvironmentsAsync();
    return PartialView(environments);
}

```

View Code:

```
<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")

```

The Data Access Code:

```
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());
}

```

The Error I get is:

> 
> Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
> 
> 
> Exception Details: System.InvalidOperationException: HttpServerUtility.Execute blocked while waiting for an asynchronous operation to complete.
> 
> 
>

Answer: 
First of all, [you cannot use asynchronous processing with child actions](http://forums.asp.net/p/1823175/5062820.aspx) and I suppose this is what you are trying to do.

Secondly, you are not doing any asynchronous processing here by spinning up another thread to execute your code with the below line of code:

```
Task.Run(() => GetAllEnvironments());

```

It will block a thread at the end of the day and you will have nothing but a context switch overhead. EF6 will have support for asynchronous processing. For asynchronous queries with pure ADO.NET, have a look:

[Asynchronous Database Calls With Task-based Asynchronous Programming Model (TAP) in ASP.NET MVC 4](http://www.tugberkugurlu.com/archive/asynchronous-database-calls-with-task-based-asynchronous-programming-model-tap-in-asp-net-mvc-4)
It's been a while since this was answered but another way around is as follows:

Call your method from an action

```
@Html.Action("YourSyncMethod", "YourController")

```

Define it as a normal sync action

```
public ActionResult YourSyncMethod()

```

Then inside it call your async method

```
var taskResponse = YourAsyncMethod(); 

```

which will return a model with whatever you need

```
private async Task<YourModel> YourAsyncMethod()

```

It seems simpler than tampering with config options or creating more complex code