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服务中,线程池仍然可以被顺利地执行。但是当循环操作时要注意,如果终止服务。那么在线程池中的任务会被停止执行。

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