Код: Выделить всё
public static System.Collections.Concurrent.ConcurrentDictionary dict =
new System.Collections.Concurrent.ConcurrentDictionary();
public static item dump;
Код: Выделить всё
foreach (System.Collections.Generic.KeyValuePair x in dict)
{
lock (x.Value)
{
if (x.Value.IsCompleted)
{
dict.TryRemove(x.Key, out dump);
}
}
}
Могу ли я удалить элементы из ConcurrentDictionary изнутри цикл перечисления этого словаря?
И этот вопрос:
Обновление полей значений в ConcurrentDictionary
Обновление полей значений в ConcurrentDictionary
p>
В этом я делаю два «рискованных» маневры:
Удаление значений из ConcurrentDictionary с одновременным перечислением по нему (что вроде бы нормально).< /li>
Блокировка части значения ConcurrentDictionary. Необходимо, поскольку манипулирование полями значения не является потокобезопасным, потокобезопасным является только манипулирование самими значениями ConcurrentDictionary (приведенный выше код представляет собой фрагмент более крупного блока кода, в котором фактически манипулируются полями значений).< /li>
Подробнее здесь: https://stackoverflow.com/questions/308 ... hin-a-lock
Мобильная версия