Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

BlockingCollection<T>.GetConsumingEnumerable Method

.NET Framework 4.6 and 4.5

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

Namespace:  System.Collections.Concurrent
Assemblies:   System.Collections.Concurrent (in System.Collections.Concurrent.dll)
  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.


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())

.NET Framework

Supported in: 4.6, 4.5, 4

.NET Framework Client Profile

Supported in: 4

.NET for Windows Phone apps

Supported in: Windows Phone 8.1

Portable Class Library

Supported in: Portable Class Library
© 2015 Microsoft