Hallo,
Es wird eine Methode "Remove" gesucht, mit der aus einer BlockingCollection ein beliebiger Eintrag entfernt werden kann.
Die Standard-Collection kann in diesem Fall nicht verwendet werden da diese nicht zusammen mit MultiThread verwendet werden kann. Wenn von mehr als einem Thread auf eine Collection zugegriffen werden soll, muss BlockingCollection eingesetzt werden.
Auf der Webseite stackoverflow.com/questions/56…from-a-blockingcollection wird eine Funktion zum Entfernen eines Eintrags aus einer BlockingCollection vorgestellt.
Wenn der C# Code in VB.Net umgewandt wird, kommt folgender Code heraus:
Bei dem Befehl ...
... werden mehrere Fehler angezeigt:
BC32089 "t" ist bereits als Typparameter dieser Methode deklariert.
BC30518 Fehler bei der Überladungsauflösung, da keine zugreifbare "ForEach" mit diesen Argumenten aufgerufen werden kann: ...
Beim Beseitigen der Fehler bin ich nicht weiter gekommen.
Wenn der Befehl in ...
... geändert wird, werden nur noch zwei Stellen bemängelt:
self.Add(V) :
BC30491: Der Ausdruck ergibt keinen Wert.
Dieser Fehler wird gleich zweimal angezeigt.
Gibt es dennoch eine funktionierende Lösung?
Es wird eine Methode "Remove" gesucht, mit der aus einer BlockingCollection ein beliebiger Eintrag entfernt werden kann.
Die Standard-Collection kann in diesem Fall nicht verwendet werden da diese nicht zusammen mit MultiThread verwendet werden kann. Wenn von mehr als einem Thread auf eine Collection zugegriffen werden soll, muss BlockingCollection eingesetzt werden.
Auf der Webseite stackoverflow.com/questions/56…from-a-blockingcollection wird eine Funktion zum Entfernen eines Eintrags aus einer BlockingCollection vorgestellt.
Wenn der C# Code in VB.Net umgewandt wird, kommt folgender Code heraus:
VB.NET-Quellcode
- Public Shared Function Remove(Of T)(self As BlockingCollection(Of T), itemToRemove As T) As Boolean
- SyncLock self
- Dim comparedItem As T
- Dim itemsList = New List(Of T)()
- Do
- Dim result = self.TryTake(comparedItem)
- If Not result Then
- Return False
- End If
- If Not comparedItem.Equals(itemToRemove) Then
- itemsList.Add(comparedItem)
- End If
- Loop While Not (comparedItem.Equals(itemToRemove))
- Parallel.ForEach(itemsList, Function(t) self.Add(t))
- End SyncLock
- Return True
- End Function
Bei dem Befehl ...
... werden mehrere Fehler angezeigt:
BC32089 "t" ist bereits als Typparameter dieser Methode deklariert.
BC30518 Fehler bei der Überladungsauflösung, da keine zugreifbare "ForEach" mit diesen Argumenten aufgerufen werden kann: ...
Beim Beseitigen der Fehler bin ich nicht weiter gekommen.
Wenn der Befehl in ...
... geändert wird, werden nur noch zwei Stellen bemängelt:
self.Add(V) :
BC30491: Der Ausdruck ergibt keinen Wert.
Dieser Fehler wird gleich zweimal angezeigt.
Gibt es dennoch eine funktionierende Lösung?