Асинхронный контроллер дочернего действия в MVC 4 - PullRequest
2 голосов
/ 20 февраля 2012
public class SomeController : AsyncController{
    [ChildAction]
    public Task<ViewResult> DoSomething(){ ... }
} 

Если бы я вызвал вышеуказанное действие из представления обычного контроллера, что бы произошло?например,

<body>
      @Html.Action("DoSomething","SomeController")
</body>

Я могу представить 4 сценария, учитывая мое понимание того, как реализован асинхронный контроллер.

  1. Произойдет ошибка, поскольку родительский контроллер ожидает ActionResult.

  2. Произойдет ошибка случайным образом, поскольку действие асинхронно, и родитель может вызвать HttpResponse.End ()

  3. Платформа Mvc достаточно умначтобы понять, что дочернее действие возвращает задачу, поэтому родительский контроллер продолжит выполнение, а затем дождется возврата всех асинхронных результатов (так называемого объединения потоков), прежде чем вызовет Response.End ()

  4. Инфраструктура Mvc будет продвигать родительское действие в асинхронный поток, сериализовать информацию об ответах и ​​убирать ее, а когда сигналы асинхронных задач передадут, повторно ее обработать и возобновить работу.*

    Может кто-то с лучшим пониманием структуры описать, что происходит за кулисами, и сказать мне, если вообще имеет смысл иметьn асинхронное дочернее действие?

...