Gewusst wie: Hinzufügen und Entfernen von einzelnen Elementen zu bzw. aus einer BlockingCollection

Dieses Beispiel zeigt, wie einem BlockingCollection<T>-Objekt Elemente sowohl auf blockierende als auch auf nicht blockierende Weise hinzugefügt und wie Elemente auf diese Weisen aus dem Objekt entfernt werden können. Weitere Informationen zu BlockingCollection<T> finden Sie unter Übersicht über BlockingCollection.

Ein Beispiel für das Entfernen von Elementen aus einer BlockingCollection<T> per Enumeration, bis sie leer ist und keine weiteren Elemente hinzugefügt werden, finden Sie unter Vorgehensweise: Entfernen von Elementen in einer BlockingCollection mit ForEach.

Beispiel

Dieses erste Beispiel zeigt, wie Elemente hinzuzufügen und zu entnehmen sind, damit die Vorgänge blockiert werden, wenn die Auflistung entweder vorübergehend leer ist (beim Entnehmen) oder ihre maximale Kapazität erreicht hat (beim Hinzufügen) oder wenn ein angegebenes Timeout erreicht ist. Beachten Sie, dass Blockierung für maximale Kapazität nur aktiviert wird, wenn bei der Erstellung von BlockingCollection im Konstruktor eine maximale Kapazität angegeben wurde.

[!code-csharpCDS_BlockingCollection#01] [!code-vbCDS_BlockingCollection#01]

Beispiel

In diesem zweiten Beispiel wird veranschaulicht, wie Elemente hinzuzufügen bzw. zu entnehmen sind, damit die Vorgänge nicht blockiert werden. Ist kein Element vorhanden, oder ist die maximale Kapazität in einer begrenzten Auflistung erreicht, oder ist das Timeout erreicht, gibt der TryAdd -Vorgang oder der TryTake -Vorgang „false“ zurück. Dies ermöglicht dem Thread, vorübergehend eine andere Aufgabe zu erledigen und später erneut zu versuchen, entweder ein neues Element abzurufen oder das Element hinzuzufügen, das zuvor nicht hinzugefügt werden konnte. Das Programm veranschaulicht außerdem, wie für den Zugriff auf eine BlockingCollection<T> ein Abbruch implementiert wird.

[!code-csharpCDS_BlockingCollection#02] [!code-vbCDS_BlockingCollection#02]

Siehe auch

System.Collections.Concurrent
Übersicht über BlockingCollection