Нужно ли применять блокировку даже при доступе к параллельному словарю
Я использую статический параллельный словарь в веб-API, и он доступен для всех пользователей.
Я использую методы ниже: все эти методы потокобезопасны? Или я должен добавить lock()
хотя это ConccurentDictionary
?
По сути, к нему обращаются все пользователи, поэтому он должен иметь возможность работать соответствующим образом, так как этот словарь содержит коллекцию для каждого пользователя и полагается на это.
static ConcurrentDictionary<string, SApp> SAppFarm= new ConcurrentDictionary<string, SApp>();
.TryRemove(_sessionUser,out s);
.TryAdd(_sessionUser, r);
.GetOrAdd(sessionUser, application);
1 ответ
ConcurrentDictionary
это задокументировано здесь потокобезопасно. Это включает в себя TryRemove
, TryAdd
а также GetOrAdd
методы.
Поэтому блокировка не требуется. Пожалуйста, имейте в виду, что безопасность потоков относится к ключам. Если вы изменяете один и тот же объект значения для данного ключа в разных потоках, вам нужно позаботиться о поточной безопасности этой операции изменения.