应用程序池回收时程序不停的抛ThreadAbortException


Web程序,在应用程序池回收的时候会不停的抛ThreadAbortException异常.先上代码和异常日志.



程序是一个静态类,静态方法里面起一个线程,线程从阻塞队列里面拿数据然后插入到数据库中.理论上当程序被回收的时候线程会抛出一个ThreadAbortException异常,然后在catch里被捕获,打印日志.catch处理完成后会自动被抛出.
但是目前的现象是程序会不停的打印ThreadAbortException异常到日志中,感觉就像catch捕获了异常后没有把异常抛出,直接进入不停抛异常-打印日志的死循环中.而且该情况是偶发,不一定每次回收应用程序池都会触发.大部分情况下回收后打印一条异常就结束了.

有没有大神能够分析一下这个反常的情况是怎么回事么?

6 个解决方案

#1


把 Thread 声明成全局静态的试下呢。

#2


代码里调用thread.Abort了吗?

#3


引用 2 楼 FoxDave 的回复:
代码里调用thread.Abort了吗?

回收应用程序池的时候会自动触发的,代码里面没有显示调用.

#4


引用 1 楼 herbcs 的回复:
把 Thread 声明成全局静态的试下呢。

跟全局静态有什么关系么?我怀疑可能是线程在终止的过程中,一直有数据进入,本来线程已经中止了,但是tryadd的时候又会重新触发静态构造函数的执行,然后再次启动线程.

#5


在线程函数中,调用list的时候加锁了么?
list是静态的,每个线程都用它,不加锁的话,大家一起操作?

#6


引用 5 楼 wdh123love 的回复:
在线程函数中,调用list的时候加锁了么?
list是静态的,每个线程都用它,不加锁的话,大家一起操作?

BlockingCollection 是线程安全的.
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告