【发布时间】:2017-03-21 00:41:39
【问题描述】:
在 ASP.NET MVC 和 Web API 中,异步操作是一种控制器操作方法,标记有修饰符 async,例如:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
这将动作方法标记为异步,因此我的名称是“异步动作”,它表明该方法可能包含“等待调用其他async 方法,并且它不会从完全停止运行从上到下的代码行。它还表明它的调用者使用了类似的东西:
ActionResult result = await Login(LoginViewModel model, string returnUrl)
这意味着此调用将等待Login 派生的任何小(或大量)异步任务完成,然后才能正确返回ActionRsult。我们说调用者正在“等待”它对Login 的调用。我的问题是什么对象在第二个代码块中进行了调用,并“等待异步操作”>
我从来没有真正关心过什么叫做动作,之前一直在等待一个方法;我一直认为它非常接近请求-响应管道,并且在异步操作上,忽略结果过滤器,它几乎直接进入浏览器。
这个等待动作方法的对象是为了调用更多动作方法并防止管道中的积压,还是只是async,以便我们可以等待其中的其他任务?
【问题讨论】:
-
我不知道你在这里问什么。也许一个代码示例会有所帮助。
-
框架管道等待操作。最终目的是释放正在等待其他事物(I/O、DB 等)的资源,以便 Web 服务器可以在其他当前请求繁忙时处理更多请求。
-
@mason 这些标签是不是暗示你应该知道我在说什么。我对医学一无所知,但当我不理解论坛上的中间问题时,我不会抱怨。
-
@ProfK 您的问题最初是“防止在菲律宾积压”。我希望你能明白为什么这会引起混乱。您最初还使用我认为无法使用异步操作方法的框架标记了该问题。
-
@mason 我真诚的道歉。当使用同步操作方法确实会导致菲律宾的积压时,可能会有一些非常Goldbergesque 和迷宫般的情况,但让我们假装这是不可能的。
标签: asp.net asp.net-mvc asynchronous async-await