我正在创建需要每x秒运行一次的后台服务。它必须位于.net Framework中,因为客户端不想升级到核心或在计算机上安装此应用以外的任何内容。因此,我被限制为使用Windows服务
我的主要问题是,我将进入一个while(true)循环,检查过去的时间(是的,我知道我可以使用计时器),我不确定是否应该添加一个线程。在循环中休眠或只是离开while(true)。我主要关心的是不要使CPU/内存过载。
var nextIteration = DateTime.Now.Add(TimeSpan.FromSeconds(timer * (-1)));
while (true)
{
if (nextIteration < DateTime.Now)
{
RunService();
nextIteration = DateTime.Now.Add(TimeSpan.FromSeconds(timer));
}
}
1条答案
按热度按时间cczfrluj1#
如果您正在实现类型为BackgroundService的服务,则应考虑在以下情况下使用CancellationToken:
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio