BlockingCollection<T>.GetConsumingEnumerable メソッド

定義

コレクション内の項目を取り出す IEnumerator<T> を提供します。Provides a consuming IEnumerator<T> for items in the collection.

オーバーロード

GetConsumingEnumerable(CancellationToken)

コレクション内の項目を取り出す IEnumerable<T> を提供します。Provides a consuming IEnumerable<T> for items in the collection.

GetConsumingEnumerable()

コレクション内の項目を取り出す IEnumerator<T> を提供します。Provides a consuming IEnumerator<T> for items in the collection.

GetConsumingEnumerable(CancellationToken)

コレクション内の項目を取り出す IEnumerable<T> を提供します。Provides a consuming IEnumerable<T> for items in the collection.

public:
 System::Collections::Generic::IEnumerable<T> ^ GetConsumingEnumerable(System::Threading::CancellationToken cancellationToken);
public System.Collections.Generic.IEnumerable<T> GetConsumingEnumerable (System.Threading.CancellationToken cancellationToken);
member this.GetConsumingEnumerable : System.Threading.CancellationToken -> seq<'T>
Public Function GetConsumingEnumerable (cancellationToken As CancellationToken) As IEnumerable(Of T)
Public Iterator Function GetConsumingEnumerable (cancellationToken As CancellationToken) As IEnumerable(Of T)

パラメーター

cancellationToken
CancellationToken

観察するキャンセル トークン。A cancellation token to observe.

戻り値

IEnumerable<T>

コレクションから項目を削除して返す IEnumerable<T>An IEnumerable<T> that removes and returns items from the collection.

例外

CancellationToken が取り消されている場合。If the CancellationToken is canceled.

BlockingCollection<T> が破棄されているか、cancellationToken を作成した CancellationTokenSource が破棄されています。The BlockingCollection<T> has been disposed or the CancellationTokenSource that created cancellationToken has been disposed

注釈

このメソッドを使用すると、クライアントコードは foreach ループ (Visual Basic 内の各に対して)、または PLINQ クエリを使用して、コレクションから項目を削除でき Parallel.ForEach ます。This method enables client code to remove items from the collection by using a foreach loop (For Each in Visual Basic), or Parallel.ForEach or a PLINQ query. 列挙子は、が true を返すまで (存在する場合)、項目を提供し続け IsCompleted IsCompleted ます。が false の場合は、項目が使用可能になるまで、またはがキャンセルされるまで、ループはブロックされ CancellationToken ます。The enumerator will continue to provide items (if any exist) until IsCompleted returns true, and if IsCompleted is false the loop blocks until an item becomes available or until the CancellationToken is cancelled.

適用対象

GetConsumingEnumerable()

コレクション内の項目を取り出す IEnumerator<T> を提供します。Provides a consuming IEnumerator<T> for items in the collection.

public:
 System::Collections::Generic::IEnumerable<T> ^ GetConsumingEnumerable();
public System.Collections.Generic.IEnumerable<T> GetConsumingEnumerable ();
member this.GetConsumingEnumerable : unit -> seq<'T>
Public Function GetConsumingEnumerable () As IEnumerable(Of T)

戻り値

IEnumerable<T>

コレクションから項目を削除して返す IEnumerable<T>An IEnumerable<T> that removes and returns items from the collection.

例外

BlockingCollection<T> は破棄されています。The BlockingCollection<T> has been disposed.

次の例は、メソッドの使用方法を示してい GetConsumingEnumerable ます。The following example shows how to use the GetConsumingEnumerable method:

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
        }
    }
}
'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 not responding.
                    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

適用対象