BlockingCollection<T>.GetConsumingEnumerable Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje využití IEnumerable<T> pro položky v kolekci.
Přetížení
GetConsumingEnumerable(CancellationToken) |
Poskytuje využití IEnumerable<T> pro položky v kolekci. |
GetConsumingEnumerable() |
Poskytuje využití IEnumerable<T> pro položky v kolekci. |
GetConsumingEnumerable(CancellationToken)
- Zdroj:
- BlockingCollection.cs
- Zdroj:
- BlockingCollection.cs
- Zdroj:
- BlockingCollection.cs
Poskytuje využití IEnumerable<T> pro položky v kolekci.
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 zrušení, který se má sledovat.
Návraty
Objekt IEnumerable<T> , který odebere a vrátí položky z kolekce.
Výjimky
Položka CancellationToken je zrušena.
Došlo BlockingCollection<T> k odstranění nebo vytvořenému cancellationToken
objektu CancellationTokenSource se vyřaďte.
Poznámky
Tato metoda umožňuje klientskému kódu odebrat položky z kolekce pomocí smyčky foreach (For Each v jazyce Visual Basic) nebo Parallel.ForEach dotazu PLINQ. Enumerátor bude dál poskytovat položky (pokud existují), dokud IsCompleted nevrátí hodnotu true, a pokud IsCompleted je false, smyčka blokuje, dokud položka nebude k dispozici nebo dokud CancellationToken není zrušena.
Viz také
Platí pro
GetConsumingEnumerable()
- Zdroj:
- BlockingCollection.cs
- Zdroj:
- BlockingCollection.cs
- Zdroj:
- BlockingCollection.cs
Poskytuje využití IEnumerable<T> pro položky v kolekci.
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)
Návraty
Objekt IEnumerable<T> , který odebere a vrátí položky z kolekce.
Výjimky
Byla BlockingCollection<T> zlikvidována.
Příklady
Následující příklad ukazuje, jak použít metodu 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
}
}
}
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