C#线程池应用程序在web应用中是否继续执行的测试

本文通过实验对比了线程池在IIS部署的Web应用与VS服务启动环境下的表现,揭示了线程池线程在不同场景下的执行特性。在IIS环境中,即使页面关闭,线程池中的任务仍能持续执行;而在服务迅速结束的情况下,未完成的线程池任务将被终止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程池线程在进程未结束时,做为后台线程,它不会结束执行。但在前台进程结束后,没有执行完成的线程池对象就不会再执行了。因此做为web应用程序,使用线程池线程可能增加性能。但要考虑如果进程结束了。程序是否会被terminate的问题。

首先做了在应用程序池的测试。使用iis新建了一个网站。然后打开页面。用ajax去调用方法。然后迅速关闭该页面。ajax的方法如下:

 private void ThreadPoolTest()
        {
            /*测试目的是当页面关闭后,在线程池中的程序是不是仍可能运行*/
            logger.Debug("this is a test!");
            commResponse.IsSuccess = true;
            commResponse.Msg = "返回数据成功";
            ThreadPool.QueueUserWorkItem((obj) => {
                logger.Debug("threadPool is start ....");
                Thread.Sleep(1000 * 30);
                logger.Debug("threadPool is end!");
            });
            ReturnJson(commResponse);
        }

测试结果如下:由此可以在部署后的web应用程序中这个进程池一直在运行的,所以它没有被结束掉。

2018-09-08 22:33:27,916 [9] DEBUG WebDemo.Ajax.ComsumerAjax - this is a test!
2018-09-08 22:33:27,937 [8] DEBUG WebDemo.Ajax.ComsumerAjax - threadPool is start ....
2018-09-08 22:33:57,937 [8] DEBUG WebDemo.Ajax.ComsumerAjax - threadPool is end!

接下来,思考如果使用VS中的服务启动,ajax后迅速结束服务。会出现什么情况呢?

 private void ThreadPoolTest()
        {
            /*测试目的是当页面关闭后,在线程池中的程序是不是仍可能运行*/
            logger.Debug("this is debug mode's test!");
            commResponse.IsSuccess = true;
            commResponse.Msg = "返回数据成功";
            ThreadPool.QueueUserWorkItem((obj) => {
                logger.Debug("threadPool is start ....");
                Thread.Sleep(1000 * 30);
                logger.Debug("threadPool is end!");
            });
            ReturnJson(commResponse);
        }

结果如下:

2018-09-08 22:33:27,916 [9] DEBUG WebDemo.Ajax.ComsumerAjax - this is a test!
2018-09-08 22:33:27,937 [8] DEBUG WebDemo.Ajax.ComsumerAjax - threadPool is start ....
2018-09-08 22:33:57,937 [8] DEBUG WebDemo.Ajax.ComsumerAjax - threadPool is end!
2018-09-08 22:36:57,588 [7] DEBUG WebDemo.Ajax.ComsumerAjax - this is debug mode's test!
2018-09-08 22:36:57,595 [6] DEBUG WebDemo.Ajax.ComsumerAjax - threadPool is start ....

结论:

在IIS环境下部署的web应用,因为进程在持续的进行的,所以可以放心地使用线程池来处理一些简短的任务。下一篇中我们继续探讨在windows服务中,是不是也可以安全地使用线程池来完成任务呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值