TryUpdate
TryUpdate у
ConcurrentDictionary
сравнивает старое значение атомарно.
При неверном сравнении возвращает false
и не меняет число. Коллекция безопасна
для нескольких потоков; примеры - в одном.
Синтаксис
bool updated = map.TryUpdate(key, newValue, comparisonValue);
Пример
Давайте сменить 1 на 2:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
map.TryAdd("abcde", 1);
bool res = map.TryUpdate("abcde", 2, 1);
Console.WriteLine(res);
Console.WriteLine(map["abcde"]);
}
}
Результат выполнения кода:
True
2
Пример
Давайте передать неверное сравниваемое значение:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
map.TryAdd("abcde", 1);
bool res = map.TryUpdate("abcde", 2, 9);
Console.WriteLine(res);
Console.WriteLine(map["abcde"]);
}
}
Результат выполнения кода:
False
1
Пример
Давайте обновить отсутствующий ключ:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
ConcurrentDictionary<string, int> map =
new ConcurrentDictionary<string, int>();
bool res = map.TryUpdate("abcde", 2, 1);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
AddOrUpdate,
добавить или обновить -
TryAdd,
первая запись -
индексатор,
чтение после смены -
ConcurrentDictionary,
класс словаря