这是我在 .net core 5 中的代码,它希望每 2 分钟触发一个函数。我不知道为什么 LoadData
函数在 2 分钟后没有触发,只有第一次触发?
public Task StartAsync(CancellationToken stoppingToken)
{
var _timer = new System.Threading.Timer(LoadData, null, TimeSpan.Zero, TimeSpan.FromMinutes(2));
return Task.CompletedTask;
}
private async void LoadData(object state)
{
var res = await _repository.GetAsync();
//....
}
最佳答案
以下行:
var _timer = new System.Threading.Timer(LoadData, null, TimeSpan.Zero, TimeSpan.FromMinutes(2));
将创建一个计时器并将引用仅保存到局部变量,从而允许 GC 收集System.Threading.Timer
。解决方法可以是引入一个字段:
System.Threading.Timer _timer;
public Task StartAsync(CancellationToken stoppingToken)
{
_timer = new System.Threading.Timer(LoadData, null, TimeSpan.Zero, TimeSpan.FromMinutes(2));
return Task.CompletedTask;
}
切换到 System.Timers.Timer 也可以工作(但尚未测试)。
另请参阅:
关于c# - C# 中的 IHostedService 不会每次都触发方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76905468/