RPM*_*984 6 c# multithreading .net-4.0 threadpool asp.net-mvc-3
我有一个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);
}
Run Code Online (Sandbox Code Playgroud)
.NET 4 的新方法是使用Task.
http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx
Task.Factory.StartNew(MyBackgroundAction);
Run Code Online (Sandbox Code Playgroud)
但是对于这个简单的操作,你只想运行它而不关心协调任务,使用ThreadPool同样容易。
ThreadPool.QueueUserWorkItem(MyBackgroundAction)
Run Code Online (Sandbox Code Playgroud)
您希望避免为每个操作自己创建一个新线程——它会占用更多资源并且造成不必要的浪费。
如果您的后台任务运行时间更长,您可能需要设置一个生产者/消费者队列,并有一个或一组持续运行的后台线程来运行这些任务。
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |