我正在编写一个 Windows 服务,一旦启动就会每 X 小时运行一次。它完成的过程相当密集,所以我想使用后台 worker 。我正在使用一个设置文件来存储运行之间的时间和上次服务运行的时间。
我不太确定最好的方法 - 也就是说,我希望服务使用尽可能少的资源闲置,并且当它运行时,它需要在后台工作程序中运行,报告它做了什么, 然后回到空闲模式。
我考虑过使用 2 个后台工作人员。第一个工作人员将是运行如下服务的私有(private)局部变量:
while (true)
{
//create new background worker and run
Thread.Sleep(Settings.Default.SleepTimeHours * 3600000);
}
有一个子 worker ,它在循环的每次迭代中创建,并在完成时销毁。为了支持取消,我认为我必须在服务中提供第二个工作人员的本地实例,但如果进程当前未运行,它将为 null。当辅助 worker 完成时,它会发出我的报告,在设置文件中设置最后运行时间,然后处理 worker 并将引用设置为 null。
我想知道是否有更好的方法或最佳实践。
谢谢
最佳答案
我通常使用定时器,然后在进程开始运行时停止它。
这是一篇解释 how to do it 的文章.
关于c# - 定期运行的 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1498498/