Ich habe eine Dictionary<string, someobject>
.Verwenden der Sperre für den Schlüssel eines Dictionary <string, Objekt>
EDIT: Es wurde darauf hingewiesen, dass mein Beispiel schlecht war. Meine ganze Absicht war nicht, die Referenzen in einer Schleife zu aktualisieren, sondern um verschiedene Werte zu aktualisieren, die auf unterschiedlichen Threads basieren, müssen die Daten aktualisieren/abrufen. Ich habe die Schleife in eine Methode geändert.
Ich muss Elemente in meinem Wörterbuch aktualisieren - ein Schlüssel nach dem anderen und ich fragte mich, ob es Probleme bei der Verwendung der Sperre für den .key-Wert meines Dictionary-Objekts gibt?
private static Dictionary<string, MatrixElement> matrixElements = new Dictionary<string, MatrixElement>();
//Pseudo-code
public static void UpdateValue(string key)
{
KeyValuePair<string, MatrixElement> keyValuePair = matrixElements[key];
lock (keyValuePair.Key)
{
keyValuePair.Value = SomeMeanMethod();
}
}
Würde das vor Gericht bestehen oder scheitern? Ich möchte nur, dass jeder Wert im Wörterbuch unabhängig gesperrt wird, sodass das Sperren (und Aktualisieren) eines Wertes die anderen nicht sperrt. Ich bin mir auch bewusst, dass die Sperre für eine lange Zeit hält - aber die Daten werden ungültig, bis sie vollständig aktualisiert werden.
keine Antwort, aber Sie wissen, dass, wenn Sie bereits das Paar haben, Sie pair.Value verwenden können, anstatt den Operator [] erneut im Dictionary aufzurufen? – OregonGhost
Eigentlich habe ich versucht, aber der Wert ist schreibgeschützt oder so meine IDE sagte mir? –
Sie können foreach Elemente nicht ändern – sieben