BlockingCollection<T>.GetConsumingEnumerable Método
Definición
Proporciona una interfaz IEnumerator<T> en uso para los elementos de la colección.Provides a consuming IEnumerator<T> for items in the collection.
Sobrecargas
GetConsumingEnumerable(CancellationToken) |
Proporciona una interfaz IEnumerable<T> en uso para los elementos de la colección.Provides a consuming IEnumerable<T> for items in the collection. |
GetConsumingEnumerable() |
Proporciona una interfaz IEnumerator<T> en uso para los elementos de la colección.Provides a consuming IEnumerator<T> for items in the collection. |
GetConsumingEnumerable(CancellationToken)
Proporciona una interfaz IEnumerable<T> en uso para los elementos de la colección.Provides a consuming IEnumerable<T> for items in the collection.
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)
Parámetros
- cancellationToken
- CancellationToken
Token de cancelación que se va a observar.A cancellation token to observe.
Devoluciones
IEnumerable<T> que quita y devuelve elementos de la colección.An IEnumerable<T> that removes and returns items from the collection.
Excepciones
Si se cancela CancellationToken.If the CancellationToken is canceled.
BlockingCollection<T> ha sido eliminado o CancellationTokenSource que creó cancellationToken
ha sido eliminado.The BlockingCollection<T> has been disposed or the CancellationTokenSource that created cancellationToken
has been disposed
Comentarios
Este método permite al código de cliente quitar elementos de la colección utilizando un bucle foreach (for each en Visual Basic) o Parallel.ForEach una consulta PLINQ.This method enables client code to remove items from the collection by using a foreach loop (For Each in Visual Basic), or Parallel.ForEach or a PLINQ query. El enumerador seguirá proporcionando elementos (si existen) hasta que IsCompleted devuelva true y, si IsCompleted es false, el bucle se bloquea hasta que un elemento esté disponible o hasta que CancellationToken se cancele.The enumerator will continue to provide items (if any exist) until IsCompleted returns true, and if IsCompleted is false the loop blocks until an item becomes available or until the CancellationToken is cancelled.
Consulte también
- Colecciones seguras para subprocesosThread-Safe Collections
- Información general sobre BlockingCollectionBlockingCollection Overview
Se aplica a
GetConsumingEnumerable()
Proporciona una interfaz IEnumerator<T> en uso para los elementos de la colección.Provides a consuming IEnumerator<T> for items in the collection.
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)
Devoluciones
IEnumerable<T> que quita y devuelve elementos de la colección.An IEnumerable<T> that removes and returns items from the collection.
Excepciones
Se ha eliminado BlockingCollection<T>.The BlockingCollection<T> has been disposed.
Ejemplos
En el ejemplo siguiente se muestra cómo usar el GetConsumingEnumerable método:The following example shows how to use the GetConsumingEnumerable method:
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
await Task.Run(async () =>
{
for (int i = 0; i < 10; i++)
{
bc.Add(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(item);
}
}
}
}
'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
Consulte también
- Colecciones seguras para subprocesosThread-Safe Collections
- Información general sobre BlockingCollectionBlockingCollection Overview