Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最佳ASP.NET后台服务实现_Asp.net_Multithreading_Background_Backgroundworker_Timer - Fatal编程技术网

最佳ASP.NET后台服务实现

最佳ASP.NET后台服务实现,asp.net,multithreading,background,backgroundworker,timer,Asp.net,Multithreading,Background,Backgroundworker,Timer,ASP.NET应用程序中多个后台服务的最佳实现是什么 计时器回调 Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000); 线程或线程池 Thread thread = new Thread(Work); thread.IsBackground = true; thread.Start(); 幕后工作者 BackgroundWorker worker = new Backgro

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

  • 计时器回调

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
    
  • 线程或线程池

    Thread thread = new Thread(Work);
    thread.IsBackground = true;
    thread.Start();
    
  • 幕后工作者

    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += new DoWorkEventHandler(DoMyWork);
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
    worker.RunWorkerAsync();
    
  • 缓存类(位于Jeff Atwood's)


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

    好吧,与其使用“简单线程”,不如使用线程池


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

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

    原始海报中的任何建议都不会扩展到多个服务器

    我想要同样的东西: 这是一种健壮且易于使用的方法,用于调度常规后台任务,并在不影响当前用户请求的情况下执行特别繁重的处理(重建缓存等)

    我想让任务在web应用上下文中运行,a)从web.config获取配置(避免重复配置),b)与web应用一起部署(轻松部署)。 我需要它的网站传播到多个服务器的工作

    我只找到了一种能满足我需求的方法:


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

    我也会运行Windows服务,但是如果您不确定最终用户是否有这种能力,例如在共享主机环境中,我仍然想确保我仍然可以托管这些“服务”。我还找到了第四个选择-。再次感谢您的回复!关于这一选择;有人提醒我,只有当有人访问该网站时,它才会起作用。如果没有人访问,它可能不会从缓存中删除该项并执行任务。在使用它之前,我会亲自检查一下(我没有)。当然,Windows服务是最稳定的,如果它作为一个选项存在的话。对于在多台服务器上运行的服务,我强烈建议将其分解为一个Windows服务,该服务与类似MSMQ的消息队列进行交互。那是你最好的选择。我想要的是一个共享托管环境,而不是一个自托管或虚拟托管环境。