ConcurrentDictionary
ConcurrentDictionary<TKey, TValue>
не требует внешней блокировки при
одновременном доступе. В примерах ниже -
один поток, чтобы вывод был предсказуемым;
тип рассчитан на несколько потоков.
Добавление -
TryAdd,
чтение -
GetOrAdd.
Синтаксис
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
Пример
Давайте добавить ключ "abcde":
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
bool res = map.TryAdd("abcde", 1);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте прочитать значение через
индексатор:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
map.TryAdd("abcde", 1);
int res = map["abcde"];
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте обновить через
AddOrUpdate:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
map.AddOrUpdate("abcde", 1, (key, old) => old + 1);
int res = map.AddOrUpdate("abcde", 1, (key, old) => old + 1);
Console.WriteLine(res);
}
}
Результат выполнения кода:
2
Смотрите также
-
TryAdd,
добавить, если нет ключа -
TryRemove,
удалить пару -
ConcurrentQueue,
очередь без блокировки -
ConcurrentBag,
мешок без порядка