2012-06-25 4 views
1

Если я использую ConcurentDictionary DIC в многопоточном доступе к методу я могу быть уверен, что в такой конструкции:Перечисляя на ConcurentDictionary

foreach (Subscription sub in subscriptions[ex].Values) 
        { 
         .... 
        } 

subscriptions является ConcurrentDictionary<string, ConcurrentDictionary<long, Subscription>> привычкой изменения при работе несколько способами, так что это будет нить сохранить? Или я должен использовать блокировку как:

lock(padLock) 
{ 
foreach (Subscription sub in subscriptions[ex].Values) 
         { 
          .... 
         } 
} 

, чтобы заставить его работать правильно?

ответ

1

Все общедоступные и защищенные члены ConcurrentDictionary являются потокобезопасными и могут использоваться одновременно из нескольких потоков.

Так что да, вы будете в безопасности без дополнительной блокировки, даже если какая-либо другая нить изменяет коллекцию Values, пока вы повторяете ее.

изменяет Я имею в виду, что он добавляет новые пары или изменяет существующие значения в словаре.

Смежные вопросы