C#線程池應用程序在web應用中是否繼續執行的測試

線程池線程在進程未結束時,做爲後臺線程,它不會結束執行。但在前臺進程結束後,沒有執行完成的線程池對象就不會再執行了。因此做爲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服務中,是不是也可以安全地使用線程池來完成任務呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章