BlockingCollection<T>.GetConsumingEnumerable Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce un oggetto IEnumerable<T> usato per gli elementi nella raccolta.
Overload
GetConsumingEnumerable(CancellationToken) |
Fornisce un oggetto IEnumerable<T> usato per gli elementi nella raccolta. |
GetConsumingEnumerable() |
Fornisce un oggetto IEnumerable<T> usato per gli elementi nella raccolta. |
GetConsumingEnumerable(CancellationToken)
- Origine:
- BlockingCollection.cs
- Origine:
- BlockingCollection.cs
- Origine:
- BlockingCollection.cs
Fornisce un oggetto IEnumerable<T> usato per gli elementi nella raccolta.
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)
Parametri
- cancellationToken
- CancellationToken
Token di annullamento da osservare.
Restituisce
Oggetto IEnumerable<T> che rimuove e restituisce elementi dalla raccolta.
Eccezioni
L'oggetto CancellationToken viene annullato.
L'oggetto BlockingCollection<T> è stato eliminato o è stato eliminato l'oggetto CancellationTokenSource che aveva creato cancellationToken
.
Commenti
Questo metodo consente al codice client di rimuovere gli elementi dalla raccolta usando un ciclo foreach (For Each in Visual Basic) o Parallel.ForEach una query PLINQ. L'enumeratore continuerà a fornire elementi (se presenti) fino IsCompleted a quando non restituisce true e se IsCompleted è false i blocchi del ciclo fino a quando un elemento non diventa disponibile o finché non CancellationToken viene annullato.
Vedi anche
Si applica a
GetConsumingEnumerable()
- Origine:
- BlockingCollection.cs
- Origine:
- BlockingCollection.cs
- Origine:
- BlockingCollection.cs
Fornisce un oggetto IEnumerable<T> usato per gli elementi nella raccolta.
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)
Restituisce
Oggetto IEnumerable<T> che rimuove e restituisce elementi dalla raccolta.
Eccezioni
L'interfaccia BlockingCollection<T> è stata eliminata.
Esempio
Nell'esempio seguente viene illustrato come usare il GetConsumingEnumerable metodo:
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