This project is read-only.


Asynchronous child actions not supported


Attempting to use a child action that's marked as "async" in its method declaration results in the exception "HttpServerUtility.Execute blocked while waiting for an asynchronous operation to complete.".

Currently MVC 4 does not support asynchronous child actions, nor does it provide any graceful way of handling the request synchronously other than having to write a synchronous version of each action.

So far I've had to resort to hacks ( in order to force a blocking call.

A better solution might be to create a custom MvcHandler implementation that does this although MVC does not exactly make this easy with so many of the classes used in the current child action pipeline being internal/sealed.

Of course the ideal solution would be to have async child actions supported, but it would be nice to have a clean workaround until this is done.

There is also a request open on Uservoice for this, please vote.

Code to reproduce:
public class HomeController : Controller
    // GET: /Home/

    public ActionResult Index()
        return View();

    public async Task<ActionResult> Widget()
        await Task.Delay(1000);
        return Content("widget");


ViewBag.Title = "Index";
<h2>Index</h2> @Html.Action("widget")
Closed May 16, 2014 at 6:43 PM by yishaigalatzer


yishaigalatzer wrote May 6, 2013 at 8:06 PM

Thanks for reporting this issue. Unfortunately child actions cannot be run asynchronously, furthermore calling asynchronous methods from a synchronous child action is not supported. There are several issues with the simplistic solution of calling the .Result on the method, as it can result in deadlocks/data corruption/or random exceptions.

The recommended approach is avoid using async code in child actions.

We are kicking around a few ideas, and if/when we come up with useful improvements we will circle back here.

tjrobinson wrote Sep 17, 2013 at 2:04 PM

"There are several issues with the simplistic solution of calling the .Result on the method, as it can result in deadlocks/data corruption/or random exceptions."

Can you be any more specific? What about if the child action has no choice but to call something down in a library that is async only. At what point is it safe to call the asynchronous method synchronously by wrapping it in .Result or similar?

yishaigalatzer wrote May 16, 2014 at 6:43 PM

In ASP.NET vNext MVC we added support for an equivalent of asynchronous child actions.

The new feature is named ViewComponents and it's completed.

To get started you can go to

And specific use pattern is currently available in the MVC sample (not being specific here as the sample is in constant flux)

tugberk wrote Oct 6, 2014 at 12:56 PM

The following post explains how view component feature is replacing the child actions in vNext world: MVC View Components. It has full asynchronous processing capability as Yishai mentioned.