【问题标题】:Call an Async controller method and wait for result调用异步控制器方法并等待结果
【发布时间】:2015-04-26 01:54:13
【问题描述】:

我有一个控制器方法,它执行很长的操作并且几乎是这样编码的

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> MyLongMethodAsync( MyViewModel model ) {
    if ( ModelState.IsValid ) {
        try {
            await _service.DoLongTaskAsync( model );
            return RedirectToAction( "LongTaskResult", new { id = model.TaskID } );
        }
        catch ( Exception e ) {
            HandleErrorViewModel he = new HandleErrorViewModel( e.Message );
            return View( "HandleError", he );
        }
    }
}

我在剃刀视图中从 jQuery 调用此方法。

在上一期中,我注意到该方法将执行时间增加到 5 分钟以上,并希望更改该方法的行为以支持不同的用法。 具体来说,我想立即向 UI 返回任务开始的通知,然后让 UI 监听任务完成事件。我想避免让 UI 轮询结果。有没有其他方法来处理这种情况?

【问题讨论】:

标签: jquery asp.net-mvc asynchronous async-await


【解决方案1】:

服务器端的async-await 服务于它的目的,即不浪费可能正在服务其他请求而不是同步等待的线程。

这不会改变客户端和服务器之间的交互。为此,您需要另一种解决方案。我相信SignalR 是当今首选的解决方案,因为它内置了对客户端 (JS) 和服务器 (ASP.Net) 的支持,但还有其他选项,例如 XSockets。

【讨论】:

  • 感谢您的建议。直到现在才知道 SignalR
  • @Lorenzo Sure.. 随时。
猜你喜欢
  • 2021-09-15
  • 1970-01-01
  • 2015-07-05
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
相关资源
最近更新 更多