這是我的場景。觸發mvc控制器中的異步操作
我想創建一個web端點,它將啓動一個可能長時間運行的服務,可能需要20-30分鐘。我想立即返回一個HttpResponseResult並觸發服務異步運行,而不必等待服務完成後再返回給客戶端。
要做到這一點最簡單的方法是什麼?我不需要從服務返回任何結果,只需觸發它。
這是我的場景。觸發mvc控制器中的異步操作
我想創建一個web端點,它將啓動一個可能長時間運行的服務,可能需要20-30分鐘。我想立即返回一個HttpResponseResult並觸發服務異步運行,而不必等待服務完成後再返回給客戶端。
要做到這一點最簡單的方法是什麼?我不需要從服務返回任何結果,只需觸發它。
只需使用Task.Run(() => <trigger service call>)
運行任務並忽略返回值。唯一不利的一面是它會消耗線程池中的線程。如果服務具有異步版本的操作,您可以使用TaskCompletionSource
哇。很簡單。謝謝。 –
SignalR
將是我選擇做這種行爲。教程是here。
基本上,一個客戶端調用一個服務器方法/動作,並'完成'(你可以在客戶端繼續並做任何你想做的事情)。服務器完成後,它會通過RPC將數據/通知推送給客戶端。
在服務器端,您可以隨意地,同步或異步地執行代碼。
不會在那裏通過創建一個我可以調用的異步方法來更簡單一些。我感到困惑的部分是,當我完全不關心aysnc進程的結果時,如何實現異步方法。 –
不要在IIS地址空間中運行殭屍線程:http://stackoverflow.com/a/21873422/1768303 – Noseratio