public class SomeController : AsyncController{
[ChildAction]
public Task<ViewResult> DoSomething(){ ... }
}
如果我从普通控制器的视图中调用上述动作,会发生什么?例如
<body>
@Html.Action("DoSomething","SomeController")
</body>
鉴于我对异步控制器是如何实现的理解,我可以想象 4 个场景。
它将出错,因为父控制器需要一个 ActionResult。
它将随机出错,因为该操作是异步的,并且父级可能已调用 HttpResponse.End()
Mvc 框架很聪明地意识到,子动作正在返回一个任务,因此父控制器将继续执行,然后在调用 Response.End( )
Mvc 框架会将父操作提升为异步线程,序列化响应信息并将其存储起来,当异步任务发出信号时,将其重新水化并恢复操作。
对框架有更好理解的人能否描述幕后发生的事情并告诉我,如果有一个异步子动作是否有意义?