AddOrUpdate
AddOrUpdate у
ConcurrentDictionary
кладёт начальное значение, если ключа нет,
иначе вызывает функцию обновления.
В одном потоке фабрика обновления срабатывает
один раз на каждый вызов обновления.
Тип безопасен для нескольких потоков.
Синтаксис
TValue value = map.AddOrUpdate(
key, addValue, (k, old) => newValue);
Пример
Давайте вызвать AddOrUpdate первый раз:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
int res = map.AddOrUpdate(
"abcde", 1, (key, old) => old + 1);
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
Пример
Давайте проверить итог в словаре:
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);
map.AddOrUpdate("abcde", 1, (key, old) => old + 1);
int res = map["abcde"];
Console.WriteLine(res);
}
}
Результат выполнения кода:
2
Смотрите также
-
GetOrAdd,
взять без обновления -
TryUpdate,
условная замена -
TryAdd,
только добавление -
ConcurrentDictionary,
класс словаря