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