2015-02-24 31 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