最佳ASP.NET后台服务实现

时间:2009-09-15 02:27:19

标签: asp.net multithreading background backgroundworker timer

ASP.NET应用程序中多个后台服务的最佳实现是什么?

  1. 计时器回调

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
    
  2. Thread或ThreadPool

    Thread thread = new Thread(Work);
    thread.IsBackground = true;
    thread.Start();
    
  3. BackgroundWorker的

    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += new DoWorkEventHandler(DoMyWork);
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
    worker.RunWorkerAsync();
    
  4. http://www.codeproject.com/KB/aspnet/ASPNETService.aspx一样缓存(位于杰夫阿特伍德的post here

  5. 我需要在给定时间运行多个后台“服务”。一项服务可能每5分钟运行一次,另一项服务可能每天运行一次。它一次运行的服务永远不会超过10个。

3 个答案:

答案 0 :(得分:2)

嗯,而不是'简单线程',你会选择一个ThreadPool。

如果是我,我会在Windows服务中运行它并通过MSMQ与它通信。

答案 1 :(得分:0)

您应该实现一些任务状态。应用程序回收后,后台服务应修复损坏的任务。如果任务在交易中,则该行为不会出现问题。

答案 2 :(得分:0)

原始海报的所有建议都没有扩展到多个服务器。

我想要同样的事情: 一种强大且易于使用的方法,可以在不影响当前用户请求的情况下调度常规后台任务并执行临时繁重处理(重建缓存等)。

我希望在Web应用程序上下文中运行任务,a)从web.config获取配置(避免重复配置)和b)使用Web应用程序部署(轻松部署)。 我需要它来处理传播到多个服务器的网站。

我只发现了一种方法可以提供我想要的东西:

(1)为每个任务创建一个.aspx页面,并在一个在网站上调用此.aspx的单独服务器上设置wget计划任务。我已经实现了这种方法并且它可以工作,但我不喜欢100%,因为计划的任务依赖性并且它不能让我能够在后台临时执行繁重的任务