Laden...

Threadsafety bei unveränderlichem Dictionary und Zugriff mittels Key?

Erstellt von BlackMatrix vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.158 Views
B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 7 Jahren
Threadsafety bei unveränderlichem Dictionary und Zugriff mittels Key?

Hallo,

ich habe bisher folgendes Dictionary:


var dic = new Dictionary<string, ConcurrentBag<Person>>();
dic["key1"]=new ConcurrentBag<Person>();
dic["key2"]=new ConcurrentBag<Person>();

Von mehreren Threads aus, sollen nun die Personen mittels Key hinzugefügt werden. Die Anzahl der Keys im Dictionary bleibt unveränderlich. Es werden keine Einträge hinzugefügt oder gelöscht, nur die "Liste" zu dem jeweiligen Key wird aktualisiert.

Mein Zugriff innerhalb der Threads würde dann bspw. so aussehen:

dic["key1"].Add(person);

Kann ich, dadurch, dass die Dictionary-Keys unveränderlich sind auf ein einfaches Dictionary mittels Key zurückgreifen oder müsste ich auch hier ein ConcurrentDictionary verwenden?

Wozu ich auch im Netz nichts richtiges findet konnte, kann ich auf das ConcurrentBag mittels Contains zugreifen, wenn mir ein Snapshot der aktuellen Liste ausreicht oder sollte ich lieber TryPeek verwenden?

16.830 Beiträge seit 2008
vor 7 Jahren

Lesezugriffe sind Threadsicher, wenn während dessen nicht geschrieben wird.
Aber dann kannst auch sicherheitshalber gleich ein ReadOnlyDictionary nehmen.

TryPeak ist die bessere Variante in meinen Augen.
Ansonsten sind bei Concurrent* Klassen alle public-Methoden Thread-Safe (steht auch in der Doku).

B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 7 Jahren

Das ging ja fix. Vielen Dank 😃