BlockingCollection<T>.GetConsumingEnumerable Method ()

.NET Framework (current version)

Provides a consuming IEnumerator<T> for items in the collection.

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

public IEnumerable<T> GetConsumingEnumerable()

Return Value

Type: System.Collections.Generic.IEnumerable<T>

An IEnumerable<T> that removes and returns items from the collection.

Exception Condition

The BlockingCollection<T> has been disposed.

The following example shows how to use the GetConsumingEnumerable method:

class ConsumingEnumerableDemo
    // Demonstrates:
    //      BlockingCollection<T>.Add()
    //      BlockingCollection<T>.CompleteAdding()
    //      BlockingCollection<T>.GetConsumingEnumerable()
    public static void BC_GetConsumingEnumerable()
        using (BlockingCollection<int> bc = new BlockingCollection<int>())

            // Kick off a producer task
            Task.Factory.StartNew(() =>
                for (int i = 0; i < 10; i++)
                    Thread.Sleep(100); // sleep 100 ms between adds

                // Need to do this to keep foreach below from hanging

            // 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.
            foreach (var item in bc.GetConsumingEnumerable())

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