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 :
D'ailleurs mis à pars ajouter un bloc SyncLock pour encapsuler ma function je ne vois pas trop ce que je peux faire d'autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.ReadOnlyCollection peut prendre simultanément en charge plusieurs lecteurs, tant que la collection n'est pas modifiée.
http://msdn.microsoft.com/fr-fr/libr...74(VS.85).aspx
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
M@el
Partager