ReadOnlyCollection et Securité des Thread
Bonjour,
J'ai créé une classe qui hérite de System.Collections.ObjectModel.ReadOnlyCollection(Of T)
J'ai implementé une methode dans laquelle je dois énumérer ma collection.
Compte du fait que la liste sous-jacente (passé via le constructeur) ne sera jamais modifiée (la reférence est perdue), puis-je considérer que ma classe fille est thread safe ?
Voici le code, trés simple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
Public Class MyReadOnlyCollection
Inherits System.Collections.ObjectModel.ReadOnlyCollection(Of MyClasse)
Public Sub New(ByVal listOfMyClass As System.Collections.Generic.IList(Of MyClasse))
MyBase.New(listOfMyClass)
End Sub
Public Function GetPath(ByVal idBatch As Integer) As String
Dim searchId As Integer
searchId = idBatch Mod (MyBase.Count)
For Each Objt As MyClasse In Me
If searchId = Objt.Id Then Return Objt.FolderPath
Next
Return String.Empty
End Function
End Class |
D'ailleurs mis à pars ajouter un bloc SyncLock pour encapsuler ma function je ne vois pas trop ce que je peux faire d'autre.
Mais je ne pense pas que ce soit utile, cette méthode n'utilise aucune ressource partagé, si ce n'est la collection en lecture seule, qui selon MSDN semblre thread-safe en lecture :
Dans le même esprit j'ai une dernière question : plusieurs threads manipulent la même instance d'un objet, ces manipulations ne sont que des lectures des propriétés de l'instance de mon objet.
Dois-je protéger les accés aux propriété via un SyncLock dans les accesseurs ?
Typiquement dans mon exemple il s'agirait de proteger les accesseurs de mon objet "MyClass" dont je ne fait que lire les propriétés id et FolderPath.
Merci de vos lumières :ccool:
M@el