c# - 当前和推荐的触发异步线程的方法是什么?

标签 c# multithreading asp.net-mvc-3 .net-4.0 threadpool

我有一个 ASP.NET MVC 3 (.NET 4) 网络应用程序。

我有一个 [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);
}

最佳答案

新的 .NET 4 方法是使用 Task

http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx

Task.Factory.StartNew(MyBackgroundAction);

但是对于这种您只想运行它而不关心协调任务的简单操作,使用线程池同样容易。

ThreadPool.QueueUserWorkItem(MyBackgroundAction)

您希望避免自己为每个操作创建一个新线程——它会占用更多资源并且造成不必要的浪费。

如果您的后台任务运行时间较长,您可能需要设置一个生产者/消费者队列,并使用单个或一定数量的持续运行的后台线程来运行任务。

关于c# - 当前和推荐的触发异步线程的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466673/

相关文章:

c# - WPF - DataGrid 不应处理 Ctrl+A

c# - 如何比较 2 个对象列表并删除不常见的项目?

java - 如何在Java中并行执行for-each循环中的语句?

c++ - Linux终端不显示字符

asp.net-mvc-3 - MVC:将“获取/发布”路由到不同的 Controller 。怎么样?

c# - CancellationTokenSource.Cancel 抛出 ObjectDisposedException

C# 使用 FileSystemWatcher 跟踪文件夹连接

c# - WinForms 多线程 : Execute a GUI update only if the previous one has finished

c# - ASP.NET MVC : Ignore field(s) when editing

asp.net - 是否有内置的 C# 函数来生成有效的 CSS 类名?