加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

Apppool回收和带有线程的Asp.net?

发布时间:2020-12-16 06:46:45 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个执行long sp的asp.net页面. 让我们说执行sp的函数叫做Func1. 我见过这个问题: 如果我在同一个线程中运行Func1(正常执行),那么apppool将不会自行回收,因为他将其视为忙碌/工作. 但是如果我在另一个线程中执行Func1 – 那么apppool在自己设置的时
我创建了一个执行long sp的asp.net页面.
让我们说执行sp的函数叫做Func1.

我见过这个问题:

如果我在同一个线程中运行Func1(正常执行),那么apppool将不会自行回收,因为他将其视为忙碌/工作.

但是如果我在另一个线程中执行Func1 – 那么apppool在自己设置的时间之后回收:

我的问题是:为什么?

如果我同步运行一个命令,那么app是否有效并且不符合apppool recycle的条件?
如果我在新线程中创建它,那么它是否符合apppool recycle的条件?

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

解决方法

ASP.NET维护一个用于为请求提供服务的线程池线程列表.它知道它可以在没有任何线程处于活动状态时回收app域.

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

当它循环使用时,它会卸载AppDomain,导致在你的线程上抛出ThreadAbortException.

您的要求的正常解决方案是拥有一个由Web应用程序控制的Windows服务.这显然是在一个单独的过程中,因此不受Web应用程序回收的影响.但是,这是一项非常重要的工作.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读