BlockingCollection<T>.TryTake 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.
Mencoba menghapus item dari BlockingCollection<T>.
Overload
TryTake(T) |
Mencoba menghapus item dari BlockingCollection<T>. |
TryTake(T, TimeSpan) |
Mencoba menghapus item dari BlockingCollection<T> dalam periode waktu yang ditentukan. |
TryTake(T, Int32, CancellationToken) |
Mencoba menghapus item dari BlockingCollection<T> dalam periode waktu yang ditentukan saat mengamati token pembatalan. |
TryTake(T, Int32) |
Mencoba menghapus item dari BlockingCollection<T> dalam periode waktu yang ditentukan. |
Contoh
Contoh berikut menunjukkan cara menggunakan TryTake metode .
class TryTakeDemo
{
// Demonstrates:
// BlockingCollection<T>.Add()
// BlockingCollection<T>.CompleteAdding()
// BlockingCollection<T>.TryTake()
// BlockingCollection<T>.IsCompleted
public static void BC_TryTake()
{
// Construct and fill our BlockingCollection
using (BlockingCollection<int> bc = new BlockingCollection<int>())
{
int NUMITEMS = 10000;
for (int i = 0; i < NUMITEMS; i++) bc.Add(i);
bc.CompleteAdding();
int outerSum = 0;
// Delegate for consuming the BlockingCollection and adding up all items
Action action = () =>
{
int localItem;
int localSum = 0;
while (bc.TryTake(out localItem)) localSum += localItem;
Interlocked.Add(ref outerSum, localSum);
};
// Launch three parallel actions to consume the BlockingCollection
Parallel.Invoke(action, action, action);
Console.WriteLine("Sum[0..{0}) = {1}, should be {2}", NUMITEMS, outerSum, ((NUMITEMS * (NUMITEMS - 1)) / 2));
Console.WriteLine("bc.IsCompleted = {0} (should be true)", bc.IsCompleted);
}
}
}
module TryTakeDemo =
// Demonstrates:
// BlockingCollection<T>.Add()
// BlockingCollection<T>.CompleteAdding()
// BlockingCollection<T>.TryTake()
// BlockingCollection<T>.IsCompleted
let blockingCollectionTryTake () =
// Construct and fill our BlockingCollection
use bc = new BlockingCollection<int>()
let NUMITEMS = 10000;
for i = 0 to NUMITEMS - 1 do
bc.Add i
bc.CompleteAdding()
let mutable outerSum = 0
// Delegate for consuming the BlockingCollection and adding up all items
let action =
Action(fun () ->
let mutable localItem = 0
let mutable localSum = 0
while bc.TryTake &localItem do
localSum <- localSum + localItem
Interlocked.Add(&outerSum, localSum)
|> ignore)
// Launch three parallel actions to consume the BlockingCollection
Parallel.Invoke(action, action, action)
printfn $"Sum[0..{NUMITEMS}) = {outerSum}, should be {((NUMITEMS * (NUMITEMS - 1)) / 2)}"
printfn $"bc.IsCompleted = {bc.IsCompleted} (should be true)"
'Imports System.Collections.Concurrent
'Imports System.Threading
'Imports System.Threading.Tasks
Class TryTakeDemo
' Demonstrates:
' BlockingCollection<T>.Add()
' BlockingCollection<T>.CompleteAdding()
' BlockingCollection<T>.TryTake()
' BlockingCollection<T>.IsCompleted
Shared Sub BC_TryTake()
' Construct and fill our BlockingCollection
Using bc As New BlockingCollection(Of Integer)()
Dim NUMITEMS As Integer = 10000
For i As Integer = 0 To NUMITEMS - 1
bc.Add(i)
Next
bc.CompleteAdding()
Dim outerSum As Integer = 0
' Delegate for consuming the BlockingCollection and adding up all items
Dim action As Action =
Sub()
Dim localItem As Integer
Dim localSum As Integer = 0
While bc.TryTake(localItem)
localSum += localItem
End While
Interlocked.Add(outerSum, localSum)
End Sub
' Launch three parallel actions to consume the BlockingCollection
Parallel.Invoke(action, action, action)
Console.WriteLine("Sum[0..{0}) = {1}, should be {2}", NUMITEMS, outerSum, ((NUMITEMS * (NUMITEMS - 1)) / 2))
Console.WriteLine("bc.IsCompleted = {0} (should be true)", bc.IsCompleted)
End Using
End Sub
End Class
TryTake(T)
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
Mencoba menghapus item dari BlockingCollection<T>.
public:
bool TryTake([Runtime::InteropServices::Out] T % item);
public bool TryTake (out T item);
member this.TryTake : 'T -> bool
Public Function TryTake (ByRef item As T) As Boolean
Parameter
- item
- T
Item yang akan dihapus dari koleksi.
Mengembalikan
true
jika item dapat dihapus; jika tidak, false
.
Pengecualian
BlockingCollection<T> Telah dibuang.
Koleksi yang mendasar dimodifikasi di luar instans ini BlockingCollection<T> .
Keterangan
Jika koleksi kosong, metode ini segera mengembalikan false.
Urutan penghapusan item tergantung pada jenis koleksi yang digunakan untuk membuat BlockingCollection<T> instans. Saat membuat BlockingCollection<T> objek, Anda dapat menentukan jenis koleksi yang akan digunakan. Misalnya, Anda dapat menentukan ConcurrentQueue<T> objek untuk perilaku first in, first out (FIFO), atau ConcurrentStack<T> objek untuk perilaku last in, first out (LIFO). Anda dapat menggunakan kelas koleksi apa pun yang mengimplementasikan IProducerConsumerCollection<T> antarmuka. Jenis koleksi default untuk BlockingCollection<T> adalah ConcurrentQueue<T>.
Lihat juga
Berlaku untuk
TryTake(T, TimeSpan)
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
Mencoba menghapus item dari BlockingCollection<T> dalam periode waktu yang ditentukan.
public:
bool TryTake([Runtime::InteropServices::Out] T % item, TimeSpan timeout);
public bool TryTake (out T item, TimeSpan timeout);
member this.TryTake : 'T * TimeSpan -> bool
Public Function TryTake (ByRef item As T, timeout As TimeSpan) As Boolean
Parameter
- item
- T
Item yang akan dihapus dari koleksi.
- timeout
- TimeSpan
TimeSpan yang menunjukkan jumlah milidetik untuk menunggu item dihapus, atau TimeSpan yang mewakili -1 milidetik untuk menunggu tanpa batas waktu.
Mengembalikan
true
jika item dapat dihapus dari koleksi dalam waktu yang ditentukan; jika tidak, false
.
Pengecualian
BlockingCollection<T> Telah dibuang.
timeout
adalah angka negatif selain -1 milidetik, yang mewakili batas waktu tak terbatas.
-atau-
timeout
lebih besar dari Int32.MaxValue.
Koleksi yang mendasar dimodifikasi di luar instans ini BlockingCollection<T> .
Keterangan
Urutan penghapusan item tergantung pada jenis koleksi yang digunakan untuk membuat BlockingCollection<T> instans. Saat membuat BlockingCollection<T> objek, Anda dapat menentukan jenis koleksi yang akan digunakan. Misalnya, Anda dapat menentukan ConcurrentQueue<T> objek untuk perilaku first in, first out (FIFO), atau ConcurrentStack<T> objek untuk perilaku last in, first out (LIFO). Anda dapat menggunakan kelas koleksi apa pun yang mengimplementasikan IProducerConsumerCollection<T> antarmuka. Jenis koleksi default untuk BlockingCollection<T> adalah ConcurrentQueue<T>.
Lihat juga
Berlaku untuk
TryTake(T, Int32, CancellationToken)
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
Mencoba menghapus item dari BlockingCollection<T> dalam periode waktu yang ditentukan saat mengamati token pembatalan.
public:
bool TryTake([Runtime::InteropServices::Out] T % item, int millisecondsTimeout, System::Threading::CancellationToken cancellationToken);
public bool TryTake (out T item, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);
member this.TryTake : 'T * int * System.Threading.CancellationToken -> bool
Public Function TryTake (ByRef item As T, millisecondsTimeout As Integer, cancellationToken As CancellationToken) As Boolean
Parameter
- item
- T
Item yang akan dihapus dari koleksi.
- millisecondsTimeout
- Int32
Jumlah milidetik untuk menunggu item dihapus, atau Infinite (-1) menunggu tanpa batas waktu.
- cancellationToken
- CancellationToken
Token pembatalan untuk diamati.
Mengembalikan
true
jika item dapat dihapus dari koleksi dalam waktu yang ditentukan; jika tidak, false
.
Pengecualian
CancellationToken telah dibatalkan.
BlockingCollection<T> telah dibuang atau yang mendasar CancellationTokenSource telah dibuang.
millisecondsTimeout
adalah angka negatif selain -1, yang menunjukkan waktu habis yang tak terbatas.
Koleksi yang mendasar dimodifikasi di luar instans ini BlockingCollection<T> .
Keterangan
Urutan penghapusan item tergantung pada jenis koleksi yang digunakan untuk membuat BlockingCollection<T> instans. Saat membuat BlockingCollection<T> objek, Anda dapat menentukan jenis koleksi yang akan digunakan. Misalnya, Anda dapat menentukan ConcurrentQueue<T> objek untuk perilaku first in, first out (FIFO), atau ConcurrentStack<T> objek untuk perilaku last in, first out (LIFO). Anda dapat menggunakan kelas koleksi apa pun yang mengimplementasikan IProducerConsumerCollection<T> antarmuka. Jenis koleksi default untuk BlockingCollection<T> adalah ConcurrentQueue<T>.
Lihat juga
Berlaku untuk
TryTake(T, Int32)
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
- Sumber:
- BlockingCollection.cs
Mencoba menghapus item dari BlockingCollection<T> dalam periode waktu yang ditentukan.
public:
bool TryTake([Runtime::InteropServices::Out] T % item, int millisecondsTimeout);
public bool TryTake (out T item, int millisecondsTimeout);
member this.TryTake : 'T * int -> bool
Public Function TryTake (ByRef item As T, millisecondsTimeout As Integer) As Boolean
Parameter
- item
- T
Item yang akan dihapus dari koleksi.
- millisecondsTimeout
- Int32
Jumlah milidetik untuk menunggu item dihapus, atau Infinite (-1) menunggu tanpa batas waktu.
Mengembalikan
true
jika item dapat dihapus dari koleksi dalam waktu yang ditentukan; jika tidak, false
.
Pengecualian
BlockingCollection<T> Telah dibuang.
millisecondsTimeout
adalah angka negatif selain -1, yang menunjukkan waktu habis yang tak terbatas.
Koleksi yang mendasar dimodifikasi di luar instans ini BlockingCollection<T> .
Keterangan
Urutan penghapusan item tergantung pada jenis koleksi yang digunakan untuk membuat BlockingCollection<T> instans. Saat membuat BlockingCollection<T>, Anda dapat menentukan jenis koleksi yang akan digunakan. Misalnya, Anda dapat menentukan ConcurrentQueue<T> objek untuk perilaku first in, first out (FIFO), atau ConcurrentStack<T> objek untuk perilaku last in, first out (LIFO). Anda dapat menggunakan kelas koleksi apa pun yang mengimplementasikan IProducerConsumerCollection<T> antarmuka. Jenis koleksi default untuk BlockingCollection<T> adalah ConcurrentQueue<T>.