Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 58026|Resposta: 2

[Fonte] O ConcurrentDictionary suporta atualizações novas e atualizadas

[Copiar link]
Publicado em 13/07/2016 11:12:05 | | |
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).




Anterior:Consulta multicondicional LINQ onde a condição é construída
Próximo:Janelas abaixo dos comandos básicos de operação Memcached
 Senhorio| Publicado em 13/09/2016 13:33:25 |
Dicionário Concorrente vs. Dicionário+Travamento - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Fonte: Code Agriculture Network)
 Senhorio| Publicado em 23/03/2021 11:32:18 |
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com