Ambiente de desenvolvimento: .NET 4.0 ou superior
Nota: O namespace System.Collections.Concurrent dentro do .NET Framework 4. Assim como na documentação MSDN, o ConcurrentDictionary implementa uma coleção thread-safe que pode ser acessada por múltiplas threads ao mesmo tempo. O ConcurrentDictionary implementa IDictionary<TKey, TValue>, e possui alguns mecanismos únicos para adicionar e atualizar chaves/valores. (Abaixo está uma explicação de quando e qual método usar)
Cenário 1: Adicionar um novo item, somente se a chave não existir no dicionário... Use TryAdd. O TryAdd aceita a chave e o valor adicionados ao dicionário, retorna fasle se a chave não existir no dicionário; Retorna verdadeiro se estiver presente. bool público TryAdd (chave TKey, valor TValue)
Situação 2: Atualizar a chave existente no Valor... do dicionário... Use TryUpdate. Se o dicionário tiver essa chave e fornecer uma atualização condicional, ele deve fornecer um valor de comparação nesse método que pode ser atualizado quando o valor atual for equivalente ao valor de comparação (TValue comparisonValue). bool público TryUpdate (chave TKey, TValue newValue, TValue comparaçãoValue)
Situação 3: Uma chave/valor precisa ser adicionada ao dicionário; Se a chave não tiver certeza se ela existe no dicionário; Se existir, atualize. Se não existir, adicione...
Use AddOrUpdate. O AddOrUpdate tem duas sobrecargas, e as duas sobrecargas retornam o valor do valor: O primeiro parâmetro sobrecarregado é AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Os parâmetros são Chave e dois delegados; O propósito do primeiro delegado é delegar quando a chave não existe e retornar o valor (valor inicial). Essa função de delegação retorna < valor inicial, chave>. O segundo delegado Func < retorna Value, key, oldValue> e executa o primeiro delegado se a chave não existir no dicionário (se existir, ela não é executada; O objetivo é dar ao valor o valor inicial), e então ele retornará o valor (o valor inicial do valor); A segunda delegação é um método para alterar o valor do valor, que também requer return value (mudar o valor inicial para o valor final). Func < devolver o > Value, key, oldValue TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. O parâmetro da segunda sobrecarga é AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) O primeiro parâmetro é chave, o segundo é quando a chave não existe, esse valor é o valor inicial do valor, e o terceiro é delegado para executar a mudança (Func< retorna Valor, chave, valor antigo>). TValue AddOrUpdate público (TKey, TValue, Func<TKey, TValue, TValue>)
Situação 4: Adicionar o valor da chave ao dicionário, mas se a chave já existir, retirar o valor; Caso contrário, será adicionado Primeira sobrecarga: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) O primeiro parâmetro é chave, o segundo parâmetro é delegado Func<valor, chave>, quando a chave não existe, uma variável é passada como chave e o valor é alterado. e criar uma chave e um valor, retornando um valor de valor.
2. Segunda Sobrecarga: GetOrAdd (TKEY, TValue) O primeiro parâmetro é a chave, e o propósito do segundo parâmetro é criar um novo valor dado pela chave quando ela não existe. Devolve valor. TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory) TV pública Obtenha ou Adiciona (TKEY, TValue)
Cada operação do AddOrUpdate e do GetOrAdd é um método que o ConcurrentDictionary possui para modificar/escrever no dicionário, o que garante a segurança das threads (isso é feito de forma sem trava, lendo dados no dicionário). |