前一篇我們測試了應用線程池在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服務中,線程池仍然可以被順利地執行。但是當循環操作時要注意,如果終止服務。那麼在線程池中的任務會被停止執行。