2012-08-01 53 views
1

如何在控制器方法中等待異步結果?這似乎是微不足道的實施,但到目前爲止我還沒有找到一個很好的例子,乾淨優雅。以與啓動它不同的控制器方法等待異步結果

這是問題所在。我有兩個控制器方法。方法A和方法B.方法A通過TaskFactory啓動一個長時間運行的進程,並在進程結束時使用ContinueWith更新緩存的值。 A和B之間有一些中間步驟。現在,當我到達方法B時,我需要檢查緩存中的值。如果緩存中的值尚未更新,則需要等待x秒的時間並定期檢查值是否已更新。

我寧願在控制器中處理所有這些,所以客戶端不必輪詢結果(並且不得不重寫控制器來處理輪詢)。但我一直沒有找到一種方法來實現控制器方法內的輪詢,該方法在超時過期之前不會阻塞(我擔心線程池餓死)。也許沒有一個乾淨的實現,我可以在這裏使用。如果投票是正確的還是唯一的答案,我將不得不接受它。

回答

2

HTTP是一種無狀態協議。您無法在不阻止的情況下在服務器上實施此類輪詢。你有兩個可能性:在客戶端上

  • 輪詢 - 有客戶在使用AJAX定期捶你的服務器請求
  • 使用推,並有服務器通知時,一些任務完成客戶端(S) - 結賬SignalR
+0

看來投票可能是我可以做的最好的事情給予的情況。 SignalR似乎是一個很好的選擇,我只是不確定我想在應用程序的一個地方使用推式通知。 – 2012-08-01 17:40:21

0

您可以等待mvc 4獲取異步控制器或獲取mvc 4和.net 4.5的測試版。

+0

您不需要等待MVC 4.自MVC 3以來就存在異步控制器。但是它們不會幫助OP試圖實現的目標。 – 2012-08-02 15:37:48