0 votes

Besoin d'un syncroot pour une LinkedList(of T)

J'utilise VB.Net et je voudrais utiliser une LinkedList. Le seul problème est qu'il s'agit d'une application multithread. J'ai vu sur MSDN que Syncroot est une implémentation explicite de l'interface ICollection. J'ai trouvé des personnes voulant faire des choses similaires avec List(Of T). Il semble que la solution consiste à convertir la liste en l'interface.

J'ai essayé de faire ce que j'imagine être une chose similaire en VB.Net, en gros :

Dim TestLinkedList = New LinkedList(Of Long)
SyncLock (Ctype(TestLinkedList, ICollection)).SyncRoot
    .
    .
    .
End SyncLock

Ce qui précède est-il correct ?

2voto

Hans Passant Points 475940

Il fonctionnera, c'est à peu près tout ce qu'on peut en dire. SyncRoot était une erreur de .NET 1.1, il n'y a aucune raison de continuer cette pratique.

Dim list = New LinkedList(Of Long)
Dim listLock = New Object
...

SyncLock(listLock)
...
End SyncLock

0voto

thecoop Points 23695

ICollection.SyncRoot est généralement considéré comme une mauvaise idée. Vous devez soit verrouiller la collection elle-même, soit la verrouiller sur un objet de verrouillage distinct que vous créez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X