Итак, например:
ConcurrentDictionary<string,Payload> itemCache = GetItems();
foreach(KeyValuePair<string,Payload> kvPair in itemCache)
{
if(TestItemExpiry(kvPair.Value))
{ // Remove expired item.
Payload removedItem;
itemCache.TryRemove(kvPair.Key, out removedItem);
}
}
Очевидно, что с обычным словарем это вызовет исключение, поскольку удаление элементов изменяет внутреннее состояние словаря в течение срока действия перечисления. Я понимаю, что это не относится к ConcurrentDictionary, поскольку предоставленный IEnumerable обрабатывает внутреннее изменение состояния. Я понимаю это право? Есть ли лучший образец для использования?