我在angularjs中有一个HTTP post调用,大约需要7-8秒来完成任务。 url是MVC中一个控制器的动作方法。由于花费了大量时间,我不希望我的用户等待此操作,但可以导航到任何其他页面,甚至可以继续在同一页面上执行不同的操作。一旦操作完成,它将通知用户成功或失败。目前任何其他http帖子在显示相应结果之前等待此帖子完成。我需要帮助,为这种情况可以做些什么。什么是最好的方法?我检查了以下链接,我看到了一些建议。它会有帮助吗? link- http://tech.pro/tutorial/1252/asynchronous-controllers-in-asp-net-mvc
AngularJS代码 -
$http({
url: key_Url_Generate,
method: Post,
params: $scope.PlanDetails
}).then(function (result) {
//Notify user for success or failure
}
控制器操作方法 -
[HttpPost]
public ActionResult GenerateLtdQuote(LTD_PlanDetailsVM ltdPlanDetailsVM)
{
// time consuming operation here
}
答案 0 :(得分:0)
不,至少就C#而言,异步只允许线程在处于等待状态时返回到池中,即等待外部服务等响应。它不会使动作更快地返回。事实上,如果任何异步可以使事情变慢,因为它增加了开销。如果被AJAX命中的端点做任何使线程处于等待状态的事情,除了等待某个外部进程完成之外什么都没做,那么你应该使用async,但只是因为它允许服务器以更有效地使用资源。但是,它不会让任何事情发生得更快。
就JavaScript而言,Async略有不同,因为JavaScript进程将继续。这就是为什么你有一个AJAX请求的回调。当远程访问的任何资源最终响应时,将调用回调,但在此期间其他事情仍然可能发生。这实际上使您的问题更多令人困惑,因为通过使用AJAX,您的页面不根本不会被阻止,用户仍然可以与页面进行交互做他们想做的事。唯一不会发生这种情况的方法是,如果您同步运行AJAX,这实际上有点难以做到,并且绝对应该避免。