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