我有一些代码可以访问我想要定期刷新内容的字典。包含对象在多个线程之间共享。
我不太了解锁定,但在我脑海中,我想到两个线程击中它,第一个在下一个之前运行完成。如果锁的主体更新共享值作为第一个更新它的线程然后所有挂起的线程将执行相同操作,这似乎是一件相当糟糕的事情。这是我对它是如何工作的理解。
所以它有点依赖于场景,但在我的情况下,我提出了这个
if (DateTimeOffset.Now.Subtract(_lastResolve) > TimeSpan.FromMinutes(2))
{
var copy = _configCache;
lock (_lock)
{
if (copy == _configCache)
{
var t = ResolveSettings();
t.Wait();
_configCache = t.Result;
}
}
}
return _configCache;
因此,在锁定之前,它会创建我们正在更新的字典的ref副本,并在进入锁体时确认副本ref仍然是针对同一个字典。
所以我的问题是双重的,我对锁定行为的理解是正确的,其次是我处理这个特定问题的方法是什么声音?
由于