2014-02-21 58 views
1

這是我的場景。觸發mvc控制器中的異步操作

我想創建一個web端點,它將啓動一個可能長時間運行的服務,可能需要20-30分鐘。我想立即返回一個HttpResponseResult並觸發服務異步運行,而不必等待服務完成後再返回給客戶端。

要做到這一點最簡單的方法是什麼?我不需要從服務返回任何結果,只需觸發它。

+0

不要在IIS地址空間中運行殭屍線程:http://stackoverflow.com/a/21873422/1768303 – Noseratio

回答

1

只需使用Task.Run(() => <trigger service call>)運行任務並忽略返回值。唯一不利的一面是它會消耗線程池中的線程。如果服務具有異步版本的操作,您可以使用TaskCompletionSource

+0

哇。很簡單。謝謝。 –

0

SignalR將是我選擇做這種行爲。教程是here

基本上,一個客戶端調用一個服務器方法/動作,並'完成'(你可以在客戶端繼續並做任何你想做的事情)。服務器完成後,它會通過RPC將數據/通知推送給客戶端。

在服務器端,您可以隨意地,同步或異步地執行代碼。

+0

不會在那裏通過創建一個我可以調用的異步方法來更簡單一些。我感到困惑的部分是,當我完全不關心aysnc進程的結果時,如何實現異步方法。 –