3

我必须处理用 .NET Framework 1.1 编写的遗留 ASP.NET 应用程序。在检查应用程序代码时,我发现了有趣的部分。应用程序在 Application_Start 事件处理程序 (Global.asax) 中启动自定义线程。该线程必须运行应用程序的整个生命周期。

很久以前我读到这不应该被使用,但我不记得为什么。这种应用程序设计存在哪些问题?线程崩溃时是否可以再次启动线程?崩溃是否会自动记录在某处(事件日志)?ASP.NET 运行时可以出于任何原因终止线程吗?

目前我对 AppPool 回收不感兴趣。它重新启动应用程序、所有会话并创建新线程。

4

1 回答 1

2

主要问题是线程可能随时被 ASP.NET 终止。如果线程一直在运行,那么它可能应该做一些工作,并且被终止可能不会让您的应用程序在下次启动时感到高兴。

现代解决方案包括使用异步页面和内置线程池。

如果您确实选择升级,请记住在 .NET 1.1 中,抛出顶级异常的线程会退出;在 .NET 2.0 中,线程抛出顶级异常 crash。如果您升级,最好跳转到异步页面,而不是保留一个单独的线程。

于 2010-09-08T15:09:40.267 回答