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

前一篇我們測試了應用線程池在iis中環境中,是否被終止的可能性。

今天我們測試了下在windows服務中是否會被終止的可能性。

新建一個如下:

public class Test : IJob
    {
        private ILog logger = LogManager.GetLogger(typeof(Test));

        public void Execute(IJobExecutionContext context)
        {
            logger.Debug("啓動了測試...");
            ThreadPool.QueueUserWorkItem((obj) =>
            {
                logger.Debug("threadPool is start ....");
                Thread.Sleep(1000 * 30);
                logger.Debug("threadPool is end!");
            });
        }
    }

然後配置Quartzjob

<job>
        <name>ConFirmOrder</name>
        <group>THGroup</group>
        <description>測試方法</description>
        <job-type>Comm.Test, Comm</job-type>
        <durable>true</durable>
        <recover>false</recover>
    </job>

    <trigger>
      <cron>
        <name>ConFirmOrderTrigger</name>
        <group>THGroup</group>
        <description>測試方法</description>
        <job-name>ConFirmOrder</job-name>
        <job-group>THGroup</job-group>
        <!--<start-time>2015-01-22T00:00:00+08:00</start-time>-->
        <cron-expression>0 */1 * * * ?</cron-expression>
      </cron>
    </trigger>

經測試結果如下:

 Topshelf.Runtime.Windows.WindowsServiceHostname2018-09-09 16:10:00,011 [ServerScheduler_Worker-1] DEBUG Comm.Test - 啓動了測試...
 Comm.Testname2018-09-09 16:10:00,011 [17] DEBUG Comm.Test - threadPool is start ....
 Comm.Testname2018-09-09 16:10:30,018 [17] DEBUG Comm.Test - threadPool is end!
 Comm.Testname2018-09-09 16:11:00,001 [ServerScheduler_Worker-2] DEBUG Comm.Test - 啓動了測試...
 Comm.Testname2018-09-09 16:11:00,001 [18] DEBUG Comm.Test - threadPool is start ....
 Comm.Testname2018-09-09 16:11:30,015 [18] DEBUG Comm.Test - threadPool is end!
 Comm.Testname2018-09-09 16:12:00,014 [ServerScheduler_Worker-3] DEBUG Comm.Test - 啓動了測試...
 Comm.Testname2018-09-09 16:12:00,014 [19] DEBUG Comm.Test - threadPool is start ....
 Comm.Testname2018-09-09 16:12:30,029 [19] DEBUG Comm.Test - threadPool is end!
 Comm.Testname2018-09-09 16:13:00,012 [ServerScheduler_Worker-4] DEBUG Comm.Test - 啓動了測試...
 Comm.Testname2018-09-09 16:13:00,012 [20] DEBUG Comm.Test - threadPool is start ....
 Comm.Testname2018-09-09 16:13:16,158 [21] INFO  Topshelf.Runtime.Windows.WindowsServiceHost - [Topshelf] Stopping
 Topshelf.Runtime.Windows.WindowsServiceHostname2018-09-09 16:13:16,657 [21] INFO  QuartzTH.THServer - Scheduler shutdown complete
 QuartzTH.THServername2018-09-09 16:13:16,657 [21] INFO  Topshelf.Runtime.Windows.WindowsServiceHost - [Topshelf] Stopped
 Topshelf.Runtime.Windows.WindowsServiceHostname

結論:

在windows服務中,線程池仍然可以被順利地執行。但是當循環操作時要注意,如果終止服務。那麼在線程池中的任務會被停止執行。

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