[英]How can I send the HTTP response back to the user but still do more things on the server after that?
有時在調用給定的Action時需要做很多事情。 很多時候,需要完成的工作比為用戶生成下一個HTML需要做的更多。 為了讓用戶獲得更快的體驗,我想只做我需要做的事情來讓他們獲得下一個視圖並將其發送出去,但之后仍然會做更多的事情。 我怎么能這樣做,多線程? 那么我是否需要擔心確保不同的線程不會踩到彼此的腳? ASP.NET MVC中是否存在此類內容的內置功能?
正如其他人所提到的,您可以使用衍生線程來執行此操作。 我會注意考慮幾個邊緣情況的“臨界性”:
只是你可能需要解決的其他問題的食物。
我怎么能這樣做,多線程?
是!
那么我是否需要擔心確保不同的線程不會踩到彼此的腳?
無論如何 ,這是您需要處理的事情,因為兩個不同的ASP.NET請求可以同時到達(來自不同的客戶端)並且可以同時在兩個不同的工作線程中處理。 因此,即使沒有您的新功能,任何訪問共享數據的代碼都需要以線程安全的方式進行編碼。
ASP.NET MVC中是否存在此類內容的內置功能?
標准的.net多線程技術在這里應該可以正常工作(手動啟動線程,或使用Task
功能,或使用Async CTP,......)。
您可以啟動后台任務,然后從操作返回。 此示例使用.NET 4.0中的任務Parallel Library:
public ActionResult DoSomething()
{
Task t = new Task(()=>DoSomethingAsynchronously());
t.Start();
return View();
}
我會使用MSMQ進行這類工作。 我沒有在ASP.NET應用程序中生成線程,而是使用Asynchronous out of process方法來執行此操作。 它非常簡單,非常干凈。
事實上,我已經在ASP.NET應用程序中使用MSMQ很長一段時間了,並且從未遇到過這種方法的任何問題。 此外,具有不同的進程(即在不同的應用程序域中的可執行文件),長時間運行的工作是處理它的理想方式,因為您的Web應用程序不用於執行此工作。 因此,IIS,線程池和您的Web應用程序可以繼續執行他們需要的操作,而其他進程可以處理長時間運行的任務。
也許你應該試一試: 在ASP.NET MVC中使用異步控制器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.