BlockingCollection(Of T).GetConsumingEnumerable Method ()

.NET Framework (current version)
 

Provides a consuming IEnumerator(Of T) for items in the collection.

Namespace:   System.Collections.Concurrent
Assembly:  System (in System.dll)

Public Function GetConsumingEnumerable As IEnumerable(Of T)

Return Value

Type: System.Collections.Generic.IEnumerable(Of T)

An IEnumerable(Of T) that removes and returns items from the collection.

Exception Condition
ObjectDisposedException

The BlockingCollection(Of T) has been disposed.

The following example shows how to use the GetConsumingEnumerable method:

'Imports System.Threading.Tasks
'Imports System.Collections.Concurrent

' Demonstrates:
' BlockingCollection<T>.Add()
' BlockingCollection<T>.CompleteAdding()
' BlockingCollection<T>.GetConsumingEnumerable()

Class ConsumingEnumerableDemo
    Shared Sub BC_GetConsumingEnumerable()
        Using bc As New BlockingCollection(Of Integer)()

            ' Kick off a producer task
            Task.Factory.StartNew(
                Sub()
                    For i As Integer = 0 To 9
                        bc.Add(i)
                        ' sleep 100 ms between adds
                        Thread.Sleep(100)
                    Next

                    ' Need to do this to keep foreach below from hanging
                    bc.CompleteAdding()
                End Sub)
            ' Now consume the blocking collection with foreach.
            ' Use bc.GetConsumingEnumerable() instead of just bc because the
            ' former will block waiting for completion and the latter will
            ' simply take a snapshot of the current state of the underlying collection.
            For Each item In bc.GetConsumingEnumerable()
                Console.WriteLine(item)
            Next
        End Using
    End Sub
End Class

Universal Windows Platform
Available since 8
.NET Framework
Available since 4.0
Portable Class Library
Supported in: portable .NET platforms
Windows Phone
Available since 8.1
Return to top
Show: