BlockingCollection<T>.GetConsumingEnumerable Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia użycie IEnumerable<T> elementów w kolekcji.
Przeciążenia
GetConsumingEnumerable(CancellationToken) |
Zapewnia użycie IEnumerable<T> elementów w kolekcji. |
GetConsumingEnumerable() |
Zapewnia użycie IEnumerable<T> elementów w kolekcji. |
GetConsumingEnumerable(CancellationToken)
- Źródło:
- BlockingCollection.cs
- Źródło:
- BlockingCollection.cs
- Źródło:
- BlockingCollection.cs
Zapewnia użycie IEnumerable<T> elementów w kolekcji.
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)
Parametry
- cancellationToken
- CancellationToken
Token anulowania do obserwowania.
Zwraca
Element IEnumerable<T> , który usuwa i zwraca elementy z kolekcji.
Wyjątki
Element CancellationToken zostanie anulowany.
Element BlockingCollection<T> został usunięty lub CancellationTokenSource utworzony cancellationToken
został usunięty
Uwagi
Ta metoda umożliwia kodowi klienta usuwanie elementów z kolekcji przy użyciu pętli foreach (dla każdego w visual basic) lub Parallel.ForEach zapytania PLINQ. Moduł wyliczający będzie nadal dostarczać elementy (jeśli istnieją), dopóki IsCompleted nie zwróci wartości true, a jeśli IsCompleted jest fałsz, bloki pętli do momentu udostępnienia elementu lub do momentu CancellationToken anulowania.
Zobacz też
Dotyczy
GetConsumingEnumerable()
- Źródło:
- BlockingCollection.cs
- Źródło:
- BlockingCollection.cs
- Źródło:
- BlockingCollection.cs
Zapewnia użycie IEnumerable<T> elementów w kolekcji.
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)
Zwraca
Element IEnumerable<T> , który usuwa i zwraca elementy z kolekcji.
Wyjątki
Został BlockingCollection<T> usunięty.
Przykłady
W poniższym przykładzie pokazano, jak używać GetConsumingEnumerable metody:
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
}
}
}
module ConsumingEnumerableDemo =
// Demonstrates:
// BlockingCollection<T>.Add()
// BlockingCollection<T>.CompleteAdding()
// BlockingCollection<T>.GetConsumingEnumerable()
let blockingCollectionGetConsumingEnumerable () =
task {
use bc = new BlockingCollection<int>()
// Kick off a producer task
let producerTask =
task {
for i = 0 to 9 do
bc.Add i
printfn $"Producing: {i}"
do! 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.
for item in bc.GetConsumingEnumerable() do
printfn $"Consuming: {item}"
do! 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