Je dois lire dans une liste sur un thread (arrière-plan) alors qu'il peut être mis à jour à partir d'un autre (thread principal). J'essaie donc de créer une liste temporaire pour ne pas accéder à l'objet original. Comme des mises à jour peuvent avoir lieu à plusieurs endroits, il serait pratique de placer SyncLock sur la logique de lecture. Est-ce que c'est intrinsèquement faux? Quelles sont mes options pour verrouiller cela correctement, ou d'autres façons d'acquérir une copie accessible de la liste dans une condition multithread?SyncLock sur la liste dans Multithread lance toujours ArgumentException
' In Main thread:
Public SomeList = New List(Of SomeClass)
' ..edit list
' In other thread:
Dim tempList As List(Of SomeClass)
SyncLock SomeList
tempList = SomeList.ToList
End SyncLock
SomeList.ToList lance:
ArgumentException, tableau de destination n'a pas été assez longtemps. Cochez destIndex et length, ainsi que les limites inférieures du tableau.
Vous avez raison, je n'ai pas été éduqué correctement sur l'utilisation de SynckLock lorsque vous posez cette question, il est donc clair que la liste a été modifiée par un autre thread sans verrou, comme vous l'avez dit. Merci pour la mise à jour! – bretddog