停不掉的线程?

信息系统常用数据库连接。多库的话就开启多个线程连接多库分别查询。

 

有这样一个需求。    我要终止上一组多库查询线程。这些线程可能都没有执行完。有的在连接数据库,有的再获取数据。

 

 

 

此时常会发现,主线程一直停在th.Join方法里面。  也就是你没有能完全终止或者停掉你要停止的线程。

 

 

这是因为。.net中为了维护线程安全。保证一些非托管资源能得到及时释放。需要在代码执行到安全的点上。才真正终止线程(在内部引发异常的方式退出)。  因为连接数据库网络或IO资源。这些其实都是对非托管资源的包装。 如果数据库正连接和查询。 线程还没有回到安全的托管代码段中。该线程就被设计成,暂时不能立即停止它。

 

 

此时要杀掉该线程。有一个方法:取得该线程中数据库连接DbCommand和DbConnection对象。先执行DbCommand.Cancel().取消查询命令,然后DbConnection.Close()关闭数据库连接。 此时线程内部,可能会引起一些异常,并使代码跳到异常处理程序等一些安全点上。这时候再执行如上代码。就可以停掉该线程了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值