【发布时间】:2020-03-06 08:07:36
【问题描述】:
我正在创建 Windows 服务,无论我阅读什么文章,他们都在使用 System.Timers.Timer,但没有提及他们使用它的原因。
必须使用Timer吗?
以下这些 url 使用 Timer 和 windows 服务
https://www.c-sharpcorner.com/article/create-windows-services-in-c-sharp/
https://dzone.com/articles/create-windows-services-in-c
难道不能只用这些方法写代码来完成吗
protected override void OnStart(string[] args)
{
base.OnStart(args);
GetFailedProductDetails();
}
protected override void OnStop()
{
base.OnStop();
}
编辑:
每 30 分钟执行一次服务的逻辑
<appSettings>
<add key ="Mode" value ="Interval"/>
<add key ="IntervalMinutes" value ="30"/>
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
我的目标:
我想每 30 分钟运行一次这个服务来执行GetFailedProductDetails() 方法。为此,我在App.config 文件中编写了代码。
【问题讨论】:
-
服务在
GetFailedProductDetails()之后做什么?它不应该重复它的工作吗? -
当您的业务案例不要求计时器时,请不要使用计时器。许多服务等待外部信号,或使用 FileSystemWatcher 或其他东西来触发它们所做的任何事情。描述你手头的任务,以及你遇到的问题。任何比无限循环更好的方法都可以解决问题 - 目标是当服务空闲时 CPU 使用率约为 0,而计时器是实现此目的的一种可能结构。
-
@oerkelens - 我想每小时重复一次,但我们必须在
App.config文件中写入代码。请检查更新的问题。 -
@CeeMcSharpface - 我想按照 app.confi 文件中的说明每 30 分钟执行一次 GetFailedProductDetails() 方法。这不是完整的代码吗?我认为这项服务将始终每 30 分钟启动一次,但是当我在几篇文章中看到计时器时,我感到很困惑。
-
OnStart将在服务接收到来自操作系统(服务控制管理器)的启动命令、尚未运行或暂停时调用一次。 “每分钟”绝对是计时器的有效用例。只需注意处理单个进程实例可能需要比间隔更长的情况,以免耗尽资源(队列或延迟)
标签: c# .net windows-services