我正在 ASP.NET 环境中使用 SignalR 构建具有多个小部件的实时仪表板。在所有小部件都加载了它们的默认数据后,每个小部件都需要独立更新其数据。这意味着我正在使用多个计时器来更新他们的数据,这些数据来自数据库。
现在我的问题是在上述情况下使用计时器的最佳方法是什么,以及如何确保它是线程安全的
这是我现在使用的代码:
public static void Init(){
Stopwatch.Start();
_timer = new Timer(_ =>
{
if (_updating)
{
return;
}
_updating = true;
try
{
var timeDiffSecs = Stopwatch.Elapsed.TotalSeconds;
Stopwatch.Restart();
if (timeDiffSecs <= 0)
{
return;
}
//DoMyActionForUpdate
}
finally
{
_updating = false;
}
}, null, TimeSpan.FromSeconds(3), TimeSpan.FromSeconds(3));
}