BlockingCollection<T>.GetConsumingEnumerable Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt een verbruik IEnumerable<T> voor items in de verzameling.
Overloads
| Name | Description |
|---|---|
| GetConsumingEnumerable(CancellationToken) |
Biedt een verbruik IEnumerable<T> voor items in de verzameling. |
| GetConsumingEnumerable() |
Biedt een verbruik IEnumerable<T> voor items in de verzameling. |
GetConsumingEnumerable(CancellationToken)
Biedt een verbruik IEnumerable<T> voor items in de verzameling.
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)
Parameters
- cancellationToken
- CancellationToken
Een annuleringstoken om te observeren.
Retouren
Een IEnumerable<T> die items uit de verzameling verwijdert en retourneert.
Uitzonderingen
De CancellationToken bewerking is geannuleerd.
De BlockingCollection<T> is verwijderd of de CancellationTokenSource gemaakte cancellationToken is verwijderd
Opmerkingen
Met deze methode kan clientcode items uit de verzameling verwijderen met behulp van een foreach-lus (voor elke in Visual Basic) of Parallel.ForEach of een PLINQ-query. De opsommingsfunctie blijft items (indien aanwezig) opgeven totdat IsCompleted waar wordt geretourneerd en als IsCompleted dit onwaar is, blokkeert de lus totdat een item beschikbaar is of totdat het CancellationToken wordt geannuleerd.
Zie ook
- Thread-Safe Verzamelingen
- Overzicht van BlockingCollection
Van toepassing op
GetConsumingEnumerable()
Biedt een verbruik IEnumerable<T> voor items in de verzameling.
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)
Retouren
Een IEnumerable<T> die items uit de verzameling verwijdert en retourneert.
Uitzonderingen
De BlockingCollection<T> is verwijderd.
Voorbeelden
In het volgende voorbeeld ziet u hoe u de GetConsumingEnumerable methode gebruikt:
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
Zie ook
- Thread-Safe Verzamelingen
- Overzicht van BlockingCollection