2015-02-24 84 views
0

我有做了长时间操作而几乎是编码这样调用一个异步控制器的方法,并等待结果

[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来查询结果。有没有其他的方法来处理这种情况?

+0

可能是[WebSockets](https://developer.mozilla.org/en/docs/WebSockets) – 2015-02-24 12:31:59

回答

3

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

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

+1

感谢您的建议。直到现在还没有关于SignalR的信息 – Lorenzo 2015-02-24 15:40:39

+0

@Lorenzo当然..任何时候都可以。 – i3arnon 2015-02-27 21:08:31