【问题标题】:What happens to a IIS started thread after a redeploy?重新部署后 IIS 启动的线程会发生什么情况?
【发布时间】:2014-11-12 03:37:05
【问题描述】:

我的疑问如下:

  • 我有一个页面 (aspx),它启动了一个新线程。我想知道如果我取消部署应用程序,或者如果我使用新版本的线程源代码更新应用程序,该线程的进程会发生什么。

IIS 等待启动的线程完成,抛出异常还是突然停止而没有异常?

谢谢

【问题讨论】:

    标签: c# asp.net .net multithreading iis


    【解决方案1】:

    如果您使用 web.config 重新部署应用程序,您的应用程序池使用的 工作进程 将被回收。即使您更改 web.config 而不部署它也会重新启动(回收)工作进程。

    工作进程回收意味着您的应用程序将再次重新启动。它将等待正在运行的进程完成。

    但是,如果您只是部署 .aspx 代码,它将不会回收工作进程。

    另请阅读 this at SO 关于工作进程回收的信息。

    【讨论】:

    • 请注意,您将 AppDomain 回收(由在 web.config 更改/DLL 更改时在默认 AppDomin 中运行的 ASP.Net 执行)与应用程序池回收(由 IIS 基于时间/使用情况或显式重启执行)混合/停止/开始)。否则,托管线程的效果相同 - 在 AppDomain 卸载时被 .Net 运行时杀死。
    • Sam,你告诉我的是,当重新部署我输入的应用程序(web.config 也是)时,IIS 会等待我正在运行的线程来完成工作?此外,是否更换我的应用程序DLL,而不接触web.config文件,我的旧DLL的新线程可能由IIS启动?
    • @Alexei 我应该说 web.config 更改会间接回收应用程序池。 Marcelo,是的,您当前正在运行的线程将完成,但它不会从旧 DLL 启动任何新线程(下一个回发将从新程序集提供)。
    • 您不能假设仅部署一段代码就不会重新启动您的应用程序。应用程序被回收的原因有很多。这就是为什么我们通常在将新代码部署到实时环境时使用停机时间或负载平衡服务器等。
    • 例如Global.asax 文件更改也会间接回收应用程序池
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2023-03-30
    • 2012-03-22
    • 2014-06-12
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多