BlockingCollection<T>.GetConsumingEnumerable Methode

Definition

Stellt ein verwendetes IEnumerable<T> für Elemente in der Auflistung bereit.

Überlädt

GetConsumingEnumerable(CancellationToken)

Stellt ein verwendetes IEnumerable<T> für Elemente in der Auflistung bereit.

GetConsumingEnumerable()

Stellt ein verwendetes IEnumerable<T> für Elemente in der Auflistung bereit.

GetConsumingEnumerable(CancellationToken)

Stellt ein verwendetes IEnumerable<T> für Elemente in der Auflistung bereit.

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)

Parameter

cancellationToken
CancellationToken

Ein Abbruchtoken, das überwacht werden soll.

Gibt zurück

IEnumerable<T>

Ein IEnumerable<T>, das Elemente aus der Auflistung entfernt und zurückgibt.

Ausnahmen

Die BlockingCollection<T> wurde freigegeben, oder die CancellationTokenSource, die cancellationToken erstellt hat, wurde freigegeben.

Hinweise

Mit dieser Methode können Clientcode Elemente aus der Auflistung mithilfe einer Foreachschleife (For Each in Visual Basic) oder Parallel.ForEach einer PLINQ-Abfrage entfernen. Der Aufzählungsator stellt weiterhin Elemente (sofern vorhanden) IsCompleted bereit, bis "true" zurückgegeben wird, und wenn IsCompleted die Schleife Blöcke falsch ist, bis ein Element verfügbar wird oder bis dies CancellationToken abgebrochen wird.

Siehe auch

Gilt für:

GetConsumingEnumerable()

Stellt ein verwendetes IEnumerable<T> für Elemente in der Auflistung bereit.

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)

Gibt zurück

IEnumerable<T>

Ein IEnumerable<T>, das Elemente aus der Auflistung entfernt und zurückgibt.

Ausnahmen

Beispiele

Im folgenden Beispiel wird gezeigt, wie Sie die GetConsumingEnumerable Methode verwenden:

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

Siehe auch

Gilt für: