您可以使用System.Threading.Tasks.Task調用StartNew方法與Action delegate。
使用這些工具,你的控制器會是這個樣子:
[HttpPost]
public ActionResult DoSomethingLongRunning()
{
if (ModelState.IsValid)
{
Task.Factory.StartNew(() =>
fileCopier.CopyFile(CopyFileParameter1, CopyFileParameter2));
return RedirectToAction("View Indicating Long Running Progress");
}
else
{
// there is something wrong with the Post, handle it
return View("Post fallback view");
}
}
另一種選擇是,你可以使用System.Reactive.Concurrency和IScheduler接口TaskPoolScheduler爲具體落實執行動作(控制器構造可能注入。
public ActionResult DoSomethingLongRunning()
{
if (ModelState.IsValid)
{
ISchedulerImplementation.Schedule(new Action(() =>
{
fileCopier.CopyFile(CopyFileParameter1, CopyFileParameter2);
}));
return RedirectToAction("View Indicating Long Running Progress");
}
else
{
// there is something wrong with the Post, handle it
return View("Post fallback view");
}
}
作爲一個好處,如果你做這種方式,您可以使用TestScheduler當你在單元測試接口的實現。
對於MVC 3,看我的MSDN文章:http://msdn.microsoft.com/en-us/library/ee728598(VS.98).aspx如果你可以使用MVC 4和Developer Express公司11,我編寫一個簡單得多的新的Async/MVC教程。 – RickAndMSFT 2012-03-28 17:34:53