C# 如何每秒运行一次工作服务(BackgroundService)?

C# 如何每秒运行一次工作服务(BackgroundService)?,c#,.net-core,.net-core-3.0,C#,.net Core,.net Core 3.0,下面显示了使用VS 2019/.Net 3.0创建新的工作者服务项目时的scaffold-ed代码 public class Worker : BackgroundService { // .... protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested)

下面显示了使用VS 2019/.Net 3.0创建新的工作者服务项目时的scaffold-ed代码

public class Worker : BackgroundService
{
    // ....

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            // Assuming this part takes 0.5 second
            // code omitted
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
我希望服务每秒运行一次。但是,在上面的代码中,假设代码在
Task.Delay
之前运行,则需要0.5秒。服务将每1.5秒触发一次,而不是每1秒触发一次



我知道定时器可以用来触发一些动作。但是,辅助服务似乎需要使用
wait Task.Delay(…,stoppingToken)
来释放执行。如何将计时器用于员工服务项目(BackgroundService)?

如果日志记录。登录信息花费的时间超过0.5秒或超过一秒,您希望发生什么情况?我认为定时器可能比任务类中的黑客攻击更简单。
System.Threading.timer
@Dortimer即使单独使用定时器也是不够的,TBH,不仅仅是要使用什么组件;一个计时器和/或一项任务,没关系,可能会有其他障碍发生,但仍然会阻止服务每秒启动…您可以使用计时器,正如其他人所建议的那样,或者使用秒表测量经过的时间,并从所需的等待中减去它。如果计算的剩余等待时间大于0,则延迟,否则继续下一个循环。