Нужен Syncroot для LinkedList (из T) - PullRequest
       45

Нужен Syncroot для LinkedList (из T)

0 голосов
/ 09 февраля 2010

Я использую VB.Net и хотел бы использовать LinkedList. Единственная проблема в том, что это многопоточное приложение. Я видел из MSDN, что Syncroot является явной реализацией интерфейса ICollection. Я нашел людей, желающих делать подобные вещи с List (Of T). Похоже, что решение заключается в приведении списка к интерфейсу.

Я пытался сделать то, что мне кажется похожим на VB.Net, в основном:

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

Правильно ли вышеприведенное?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

Это сработает, вот и все, что можно сказать по этому поводу. SyncRoot был ошибкой в ​​.NET 1.1, нет причин продолжать практику.

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

SyncLock(listLock)
...
End SyncLock
0 голосов
/ 09 февраля 2010

ICollection.SyncRoot обычно считается плохой идеей. Вам следует либо заблокировать саму коллекцию, либо заблокировать отдельный объект блокировки, который вы создаете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...