Asp.net 在IIS中管理后台线程的一些最佳实践是什么?
我已经编写了一个生成后台线程的HttpModule。我使用线程就像一个在进程中运行的计划任务,这非常方便 跟踪此线程的最佳实践是什么?我以前从未这样做过,我对它的某些方面有点困惑:Asp.net 在IIS中管理后台线程的一些最佳实践是什么?,asp.net,multithreading,httpmodule,Asp.net,Multithreading,Httpmodule,我已经编写了一个生成后台线程的HttpModule。我使用线程就像一个在进程中运行的计划任务,这非常方便 跟踪此线程的最佳实践是什么?我以前从未这样做过,我对它的某些方面有点困惑: 如何知道线程是否仍在运行?我看到它做了它的工作,但是有没有其他方法可以知道它是否还活着?我下载了ProcMon,但是w3wp.exe产生了大量线程,所以我不知道哪个是我的线程。我给它起了个名字,但没用 如果线死了,我如何“抓住”它?是否有某种Dispose方法,如果失败,我可以让它写入事件日志或其他内容?“死亡宣言”
编辑:我只是想澄清一下,我的想法是我的帖子永远不会消失。它运行一个函数,然后进入睡眠状态几分钟,然后醒来并再次运行该函数。这不像是只完成一项任务就结束了。根据我的经验,你可以让它“足够好”,但并不完美。我建议您在windows服务中实现重复任务。根据任务所做的,Windows服务甚至可能不必与web应用程序对话,反之亦然,例如。G如果两者都使用相同的数据库。否则你仍然可以使用e。G用于通信的WCF 最大的优点是:windows服务将从操作系统启动,您可以使用控制面板轻松配置、启动和停止它,您可以通过windows事件日志进行内置监控,您可以独立更新后台服务和web应用程序等 如果这不是一个选项,例如。G由于您处于共享主机环境中,我建议您:
即使这样,如果你没有24小时正常的流量,你也不能确定你的后台线程是否一直在运行。还要记住,在共享托管环境中,如果几个小时内没有活动,则关闭应用程序池是非常常见的。您可以尝试通过在自己网络上的客户机上设置计划任务,每隔几分钟对您的应用程序执行一次轻量级HTTP请求,以确保您的应用程序始终处于运行状态来改善这一点。Jeff使Stackoverflow时,他也遇到了类似的问题 他的解决方案是使用缓存过期。您应该在缓存中放入一些内容,然后当它过期时,将在非面向用户的线程中触发一个事件。在过期事件处理程序中,插入一些代码以将项重新添加到缓存中,并为应用程序执行任何需要执行的内务管理工作 使用此技巧,您的子问题很容易得到回答:
这为您提供了一种在web应用程序中大致计算内务处理时间的好方法。它不需要单独的Windows服务,这是一个巨大的成功 您是否收到system.timeout错误?忽略。这不应该适用于这个