gpt4 book ai didi

asp.net - Apppool 回收和 Asp.net 带线程?

转载 作者:行者123 更新时间:2023-12-02 21:31:52 26 4
gpt4 key购买 nike

我制作了一个执行长sp的asp.net页面。假设执行 sp 的函数名为 Func1

我遇到过这个问题:

如果我在同一个线程中运行Func1(正常执行),应用程序池将不会自行回收,因为他将其视为忙碌/工作。

但是如果我在另一个线程中执行 Func1 - 那么应用程序池会在此处设置的时间后回收自身:

enter image description here

我的问题是:为什么是这样?

如果我同步运行命令,那么应用程序处于事件状态并且不符合应用程序池回收的条件,这是真的吗?如果我在新线程中创建它,那么它是否有资格进行应用程序池回收?

why is that ? Does the thread is less important then the main thread ?

最佳答案

ASP.NET 维护一个用于服务请求的线程池线程列表。它知道当没有任何线程处于事件状态时,它可以回收应用程序域。

如果您在不了解 ASP.NET 的情况下创建线程或使用线程池线程,它不会检测到您的线程处于事件状态,并且可能会回收。

当它回收时,它会卸载AppDomain,这会导致ThreadAbortException在您的线程上抛出。

<小时/>

满足您的要求的正常解决方案是拥有由 Web 应用程序控制的 Windows 服务。这显然是在一个单独的过程中,因此不受网络应用程序回收的影响。然而,这是一个不平凡的练习。

快速而肮脏的解决方案是从您的 Web 应用程序中异步启动 Web 请求。然后可以返回开始操作的页面。被调用的“隐藏”页面可能会阻塞,直到 SP 完成。正如我所说,这是一个令人讨厌但简单的解决方案。

关于asp.net - Apppool 回收和 Asp.net 带线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com