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

如何找出我的线程在ASP.NET中停止的原因?

发布时间:2020-12-16 04:33:00 所属栏目:asp.Net 来源:网络整理
导读:我们的日志报告ThreadAbortExceptions,它们以看似随机的间隔停止我们的Quartz.NET作业.根据我的理解,这通常不会由线程本身正在做的事情引起(例如从FTP服务器读取文件,或执行LINQ to Entities查询),而是因为某些外部进程告诉线程停止.此外,创建日志的方式让我
我们的日志报告ThreadAbortExceptions,它们以看似随机的间隔停止我们的Quartz.NET作业.根据我的理解,这通常不会由线程本身正在做的事情引起(例如从FTP服务器读取文件,或执行LINQ to Entities查询),而是因为某些外部进程告诉线程停止.此外,创建日志的方式让我相信当我们收到这些错误时整个Web应用程序正在重新启动,因此我猜测重启过程是导致线程首先被中止的原因.

所以我的问题是:我怎样才能找出服务器/应用程序重启的原因?是否有某些日志可以在每次重启时向我提供详细信息?我应该调查这样的事情的常见原因吗?

在此先感谢您的帮助.

编辑

我刚与一些同事进行了讨论,听起来IIS会在一段时间不活动后自动将应用程序置于休眠状态,这可能是问题的一部分.通过一些研究,我发现了IIS中工作线程的“空闲超时”设置.我认为当应用程序在一段时间内没有处理任何请求时,它会发出shutdown命令.出于某种原因,Quartz不会立即关闭,而是等待下一个作业被触发,然后系统检测到该作业的线程并在其尝试运行时将其杀死.

因此,当系统想要关闭时,我想我们需要想出一些方法来优雅地完成任何正在运行的作业,并且当它被告知时,如果它没有运行任何作业,那么Quartz实际上会关闭.有没有人有这种问题的经验?

解决方法

正如liho1eye指出的那样,问题出现在应用程序池关闭我们的应用程序.出于某种原因,Quartz显然没有立即关闭.相反,它等待下一个作业运行并关闭,这意味着正在运行的作业必须通过ThreadAbordException关闭.

我们的解决方案是双重的.首先,我们将Quartz更新为更新版本,这似乎使其表现得更好一些.其次,在Global.asax.cs的Application_End方法中,我们添加了对Scheduler.Shutdown(true)的调用.这告诉调度程序停止触发其他触发器,然后等待所有当前运行的触发器完成,然后允许应用程序结束.

(编辑:李大同)

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

    推荐文章
      热点阅读