BlockingCollection<T>.GetConsumingEnumerable 方法

定义

为集合中的项提供一个使用 IEnumerable<T>

重载

GetConsumingEnumerable(CancellationToken)

为集合中的项提供一个使用 IEnumerable<T>

GetConsumingEnumerable()

为集合中的项提供一个使用 IEnumerable<T>

GetConsumingEnumerable(CancellationToken)

Source:
BlockingCollection.cs
Source:
BlockingCollection.cs
Source:
BlockingCollection.cs

为集合中的项提供一个使用 IEnumerable<T>

public System.Collections.Generic.IEnumerable<T> GetConsumingEnumerable (System.Threading.CancellationToken cancellationToken);

参数

cancellationToken
CancellationToken

要观察的取消标记。

返回

从集合中移除并返回项的 IEnumerable<T>

例外

已释放 BlockingCollection<T>,或已释放创建 cancellationTokenCancellationTokenSource

注解

此方法使客户端代码能够使用 foreach 循环 (Visual Basic) 中的 Foreach 循环或 Parallel.ForEach PLINQ 查询从集合中删除项。 如果存在任何项,枚举器将继续提供项 () 直到 IsCompleted 返回 true;如果 IsCompleted 为 false,则循环将阻止,直到项变得可用或 CancellationToken 取消。

另请参阅

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetConsumingEnumerable()

Source:
BlockingCollection.cs
Source:
BlockingCollection.cs
Source:
BlockingCollection.cs

为集合中的项提供一个使用 IEnumerable<T>

public System.Collections.Generic.IEnumerable<T> GetConsumingEnumerable ();

返回

从集合中移除并返回项的 IEnumerable<T>

例外

示例

下面的示例显示如何使用 GetConsumingEnumerable 方法:

class ConsumingEnumerableDemo
{
    // Demonstrates:
    //      BlockingCollection<T>.Add()
    //      BlockingCollection<T>.CompleteAdding()
    //      BlockingCollection<T>.GetConsumingEnumerable()
    public static async Task BC_GetConsumingEnumerable()
    {
        using (BlockingCollection<int> bc = new BlockingCollection<int>())
        {
            // Kick off a producer task
            var producerTask = Task.Run(async () =>
            {
                for (int i = 0; i < 10; i++)
                {
                    bc.Add(i);
                    Console.WriteLine($"Producing: {i}");

                    await Task.Delay(100); // sleep 100 ms between adds
                }

                // Need to do this to keep foreach below from hanging
                bc.CompleteAdding();
            });

            // 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())
            {
                Console.WriteLine($"Consuming: {item}");
            }
            await producerTask; // Allow task to complete cleanup
        }
    }
}

另请参阅

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0