Jeder benutzt viel List. Ich muss über diese Liste iterieren, also verwende ich das bekannte SyncRoot Muster.Liste <T> implementiert SyncRoot nicht!
Kürzlich bemerkte ich in this Beitrag, dass die SyncRoot zugunsten von "eingebetteten" Thread-Sicherheit (jede Methode wird auf ein privates Objekt sperren, ohne es mit SyncRoot-Eigenschaft freizugeben) vermieden werden. Ich kann es verstehen, und teilweise stimme ich dem zu.
Die Frage ist, dass List<T> Klasse nicht die SyncRoot Eigenschaft nicht implementiert, auch wenn die ICollection-Schnittstelle implementiert, die die SyncRoot Eigenschaft aus. Ich sage das, Bause den Code
List<int> list = new List<int>()
list.SyncRoot;
geben Sie mir die folgenden Compiler-Fehler:
error CS0117: 'System.Collections.Generic.List' does not contain a definition for 'SyncRoot'
... Wenn dies wahr ist, wie könnte ich eine öffentliche Eigenschaft des Typs Liste <T> synchronisieren, wenn Iterieren darüber?
Ich habe nie SyncRoot im wirklichen Leben gut arbeiten gefunden, wie Sperren auf höherer Ebene besser funktioniert, anstatt nur einzelne Sammlungen sperren –