public class SomeController : AsyncController{
[ChildAction]
public Task<ViewResult> DoSomething(){ ... }
}
Если бы я вызвал вышеуказанное действие из представления обычного контроллера, что бы произошло?например,
<body>
@Html.Action("DoSomething","SomeController")
</body>
Я могу представить 4 сценария, учитывая мое понимание того, как реализован асинхронный контроллер.
Произойдет ошибка, поскольку родительский контроллер ожидает ActionResult.
Произойдет ошибка случайным образом, поскольку действие асинхронно, и родитель может вызвать HttpResponse.End ()
Платформа Mvc достаточно умначтобы понять, что дочернее действие возвращает задачу, поэтому родительский контроллер продолжит выполнение, а затем дождется возврата всех асинхронных результатов (так называемого объединения потоков), прежде чем вызовет Response.End ()
Инфраструктура Mvc будет продвигать родительское действие в асинхронный поток, сериализовать информацию об ответах и убирать ее, а когда сигналы асинхронных задач передадут, повторно ее обработать и возобновить работу.*
Может кто-то с лучшим пониманием структуры описать, что происходит за кулисами, и сказать мне, если вообще имеет смысл иметьn асинхронное дочернее действие?