Это может привести к слишком мелкозернистой блокировке. Например:
bool hasKey(string key) {
lock (_locker) {
return _dictionary.ContainsKey(key);
}
}
int getValue(string key) {
lock (_locker) {
return _dictionary[key];
}
}
И затем использовать это так:
void Kaboom() {
if (hasKey("foo")) {
int value = getValue("foo");
// etc..
}
}
Это не сработает, словарь может меняться между вызовами hasKey и getValue. Вся операция должна быть заблокирована. И да, это идет раз в месяц или около того.
bool tryGetValue(string key, out int value) {
lock (_locker) {
if (!hasKey(key)) return false;
value = getValue(key);
return true;
}
}