BlockingCollection<T>.GetConsumingEnumerable Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyediakan konsumsi IEnumerable<T> untuk item dalam koleksi.
Overload
GetConsumingEnumerable(CancellationToken) |
Menyediakan konsumsi IEnumerable<T> untuk item dalam koleksi. |
GetConsumingEnumerable() |
Menyediakan konsumsi IEnumerable<T> untuk item dalam koleksi. |
GetConsumingEnumerable(CancellationToken)
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
Menyediakan konsumsi IEnumerable<T> untuk item dalam koleksi.
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)
Parameter
- cancellationToken
- CancellationToken
Token pembatalan untuk diamati.
Mengembalikan
Yang IEnumerable<T> menghapus dan mengembalikan item dari koleksi.
Pengecualian
CancellationToken dibatalkan.
BlockingCollection<T> telah dibuang atau CancellationTokenSource yang dibuat cancellationToken
telah dibuang
Keterangan
Metode ini memungkinkan kode klien untuk menghapus item dari koleksi dengan menggunakan perulangan foreach (Untuk Setiap di Visual Basic), atau Parallel.ForEach kueri PLINQ. Enumerator akan terus menyediakan item (jika ada) hingga IsCompleted mengembalikan true, dan jika IsCompleted salah, loop memblokir hingga item tersedia atau sampai CancellationToken dibatalkan.
Lihat juga
Berlaku untuk
GetConsumingEnumerable()
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
Menyediakan konsumsi IEnumerable<T> untuk item dalam koleksi.
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)
Mengembalikan
Yang IEnumerable<T> menghapus dan mengembalikan item dari koleksi.
Pengecualian
BlockingCollection<T> Telah dibuang.
Contoh
Contoh berikut menunjukkan cara menggunakan GetConsumingEnumerable metode :
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