MVC 4中的异步控制器子操作

时间:2012-02-20 05:03:24

标签: c# asp.net-mvc asynchronous asynccontroller

public class SomeController : AsyncController{
    [ChildAction]
    public Task<ViewResult> DoSomething(){ ... }
} 

如果我从普通控制器的视图中调用上述操作,会发生什么? e.g。

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

我可以想象4个场景,因为我了解了如何实现异步控制器。

  1. 它会出错,因为父控制器需要一个ActionResult。

  2. 它将随机出错,因为该操作是异步的,而父级可能已调用HttpResponse.End()

  3. Mvc框架足够聪明,可以意识到子操作正在返回一个任务,因此父控制器将继续执行,然后等待所有异步结果返回(也称为线程连接)之前调用Response.End()

  4. Mvc框架会将父操作提升为异步线程,序列化响应信息并将其存放,当异步任务发出信号时,重新水化并恢复操作。

  5. 能够更好地理解框架的人能够描述幕后发生的事情并告诉我,是否有一个异步的子动作是否有意义?

0 个答案:

没有答案