IHostedService StartAsync随机调用,导致计时器间隔错误



我从Asp.net核心2.1版本开始使用IHostedService。我在日志中注意到,StartAsync有时会被调用,间隔从8分钟到一小时,非常混乱,每次都会调用我的DoWorkAsync。我有一个很长的过程,我不希望它在那些小的时间间隔内被调用。在正常情况下,它每两个小时运行一个计时器,使用计时器

public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is starting.");
_timer = new Timer(DoWorkAsync, null, TimeSpan.FromMinutes(2),
TimeSpan.FromHours(2));
return Task.CompletedTask;
}

我正在考虑使用lock语句,但如果我锁定了私有对象,当StartAsync再次调用时,它会锁定执行吗。我很担心,因为该进程在另一台服务器上调用WSI(Web服务(,担心它可能在前一个调用应答之前被调用,从而导致另一台服务崩溃。我的日志记录只是一个文本文件,用于记录StartAsyncDoWorkAsync中的时间。我在Aws windows实例上运行这个。如果问题可能是崩溃或自我重启,我该如何看待它的原因。我不认为我的简单文本文件会抓住它。

在我看来,StartAsync()不应该包含回调对象,这可能会给您带来麻烦。请考虑这个例子:https://learn.microsoft.com/en-us/dotnet/core/extensions/timer-service.它做到了,你想做什么,但以正确的方式。

最新更新