【发布时间】:2011-05-24 17:08:08
【问题描述】:
线程将在每个 Application_Start 事件上启动。
这将是一个应该持续运行的监控线程。
因此,即使应用程序关闭,一旦重新启动,线程也会启动,确保它始终运行。
但是我需要确保在应用程序运行时该线程不会停止/关闭。
简而言之,有没有人知道 asp.net 是否可以在不实际停止/回收应用程序的情况下关闭这样的线程。
【问题讨论】:
标签: asp.net
线程将在每个 Application_Start 事件上启动。
这将是一个应该持续运行的监控线程。
因此,即使应用程序关闭,一旦重新启动,线程也会启动,确保它始终运行。
但是我需要确保在应用程序运行时该线程不会停止/关闭。
简而言之,有没有人知道 asp.net 是否可以在不实际停止/回收应用程序的情况下关闭这样的线程。
【问题讨论】:
标签: asp.net
作为设计问题,您不应该依赖 asp.net 来运行这样的线程。应用回收之类的小事会给您带来很多麻烦。
相反,创建一个 Windows 服务来执行线程。这样你就不用担心了。
更新
我只是想添加更多信息。
IIS 能够跨多个线程和进程执行您的应用程序。标准站点安装通常只分配一个进程(又名:网络花园),该进程启动大约 20 个线程来处理请求。
但是,任何 IIS 管理员都可以轻松地添加更多进程。当站点可以处理单个进程时,他们通常会这样做,因为请求处理时间太长,或者处理程序线程的数量不够,或者如果应用程序有足够的问题,单个线程将处理整个进程,则作为临时措施处理相当频繁。
如果您在应用启动时启动了一个线程,那么它将为站点拥有的每个工作进程创建一个。这对您或您的继任者来说可能是意想不到的行为。
此外,监控应用程序几乎总是完全独立于它们所监控的应用程序。主要原因之一是,如果受监控的进程死亡、挂起或以其他方式变得无响应,那么监控应用程序本身仍需要继续并记录此信息。否则,被监控的进程可能会很好地控制监控应用程序本身。
所以,帮自己一个忙,把它转移到它自己的过程中。在 IIS 服务器上执行此操作的最佳方法是创建 Windows 服务并为其提供适当的执行权限以执行您需要的操作。
【讨论】: