-2

J'essaie de mettre à jour le code suivant pour utiliser un ConcurrentDictionary. J'apprécie toute aide.mise à jour du code Dictonary avec ConcurrentDictonary



    private Dictionary (string, SymbolOrderBook) books = new Dictionary(string, SymbolOrderBook)(); 

    SymbolOrderBook book; 

    lock (books) 
    { 
     if (!books.TryGetValue(symbol, out book)) 
     { 
      book = new SymbolOrderBook(symbol); 
      books.Add(symbol, book); 
     } 
    } 



Merci!

+0

Et qu'est-ce qui vous empêche de le faire vous-même? En outre, nous ne pouvons pas convertir cela parce que ce n'est pas un code valide. Par exemple, 'book' est-il local à la fonction ou est-ce un varible au niveau de la classe? S'il vous plaît montrer la méthode de déclinaison. –

+1

Jetez un oeil à la méthode [GetOrAdd] (https://msdn.microsoft.com/en-us/library/ee378676%28v=vs.110%29.aspx). –

Répondre

1
using System.Collections.Concurrent; 

ConcurrentDictionary<string, SymbolOrderBook> books = new ConcurrentDictionary<string, SymbolOrderBook>(); 
SymbolOrderBook book = new SymbolOrderBook(symbol); 
books.GetOrAdd(symbol, book); 
+0

Personnellement, j'utiliserais la surcharge qui prend en 'Func ' de cette façon que vous ne créez pas un nouveau livre, sauf si vous en avez besoin. De plus, le code de l'OP ne précise pas si 'book' est utilisé plus tard dans le code, votre réponse actuelle ferait de' book' une nouvelle valeur à chaque fois et n'obtiendrait jamais la valeur stockée. –

2

Vous pouvez utiliser la méthode GetOrAdd comme ceci:

D'abord, vous définissez le dictionnaire comme celui-ci:

private ConcurrentDictionary<string, SymbolOrderBook> books = 
    new ConcurrentDictionary<string, SymbolOrderBook>(); 

Et vous obtenez ou ajouter une entrée comme ceci:

SymbolOrderBook book = books.GetOrAdd(symbol, s => new SymbolOrderBook(s)); 

Ce que cela fait est qu'il renvoie un livre existant s'il existe pour le spécifié symbole, ou bien, il en crée un nouveau, l'ajoute au dictionnaire, puis le renvoie. Tout ce qui se passe dans une opération atomique.

+0

Merci, c'est ce que je cherchais. – pollardo