我有一個ASP.NET MVC 3(.NET 4)Web應用程序。什麼是當前和推薦的方法來消除異步線程?
我有一個[HttpPost]
行動方法,它將一些數據提交給數據庫。
現在,在這個方法完成後堅持存儲庫,我希望執行一個「背景」任務(想審計,或發送電子郵件等),我不關心結果(除非一個錯誤發生,在這種情況下,我會執行日誌記錄)。
我怎麼能/應該從我的操作方法中解除這個任務?
[HttpPost]
[Authorize]
public ActionResult Create(MyViewModel model)
{
if (ModelState.IsValid)
{
_repo.Save(model);
// TODO: Fire off thread
return RedirectToRoute("Somepage", new { id = model.id });
}
return View(model);
}
感謝您的回答。一個澄清 - 「你想避免爲每一個行動自己創建一個新的線程 - 它會佔用更多的資源,是不必要的浪費」 - 我怎麼能做到這一點?然後我在哪裏創建新線程?例如,我在哪裏放置'ThreadPool.QueueUserWorkItem(MyBackgroundAction)'調用? – RPM1984 2011-03-29 02:37:40
@ RPM1984使用QueueUserWorkItem意味着任務將由已經屬於ASP.Net線程池的線程完成。這些線程不斷地從隊列中消耗任務並完成它們,並且您可以在代碼中的任何地方排入新任務。不過,在我的回答中,這與ASP.Net中的主要缺點相關。 – 2011-03-29 02:43:03
@Chris - 感謝您的幫助和解答。事情是,這是一個(相對)簡單的應用程序,沒有大量的流量或併發用戶。在過去的(版本1)中,我們使用了'Thread.Start',它很好。所以我想我會用'ThreadPool.QueueUserWorkItem'去。 – RPM1984 2011-03-29 03:34:48