首页 > 解决方案 > C# windows 服务 - 每秒调用方法的最佳方式(不带 Windows.Forms.Timer)

问题描述

我想每秒调用一个方法。通常,该方法将在几毫秒后完成。但有时可能需要 2 到 3 秒。在不使用 Windows.Forms.Timer(单线程)的情况下处理此问题的最佳方法是什么。我现在的解决方案是使用 System.Timers.Timer 并设置 _timer.AutoReset = false 并且在我的“计时器经过方法”完成后,我使用 _timer.Start() 重新启动计时器

有没有更好的方法来做到这一点?

谢谢你。

标签: c#timer

解决方案


计时器以给定的时间间隔执行。这是.net 框架中使用的计时器的定义。如果您想要不同的行为,也许计时器不是您想要的。如果我正确理解您的问题,您希望将方法调用间隔 1 秒。

实现此目的的一种方法是使用异步任务。

//in your start method
Task.Run(() => YourRepeatingTask(CancellationToken.None));

private async Task YourRepeatingTask(CancellationToken token)
{
  while (true) //check for conditions here
  {
    //Do stuff here

    await Task.Delay(TimeSpan.FromSeconds(1), token);
  }
}

推荐阅读