BlockingCollection<T>.TryTake Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
öğesinden bir öğe kaldırmaya BlockingCollection<T>çalışır.
Aşırı Yüklemeler
TryTake(T) |
öğesinden bir öğe kaldırmaya BlockingCollection<T>çalışır. |
TryTake(T, TimeSpan) |
Belirtilen süre içinde öğesinden BlockingCollection<T> bir öğe kaldırmayı dener. |
TryTake(T, Int32, CancellationToken) |
bir iptal belirtecini BlockingCollection<T> gözlemlerken belirtilen süre içinde öğesinden öğe kaldırmaya çalışır. |
TryTake(T, Int32) |
Belirtilen süre içinde öğesinden BlockingCollection<T> bir öğe kaldırmayı dener. |
Örnekler
Aşağıdaki örnekte yönteminin nasıl kullanılacağı gösterilmektedir TryTake .
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)
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
öğesinden bir öğe kaldırmaya BlockingCollection<T>çalışır.
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
Parametreler
- item
- T
Koleksiyondan kaldırılacak öğe.
Döndürülenler
true
bir öğe kaldırılabilirse; aksi takdirde , false
.
Özel durumlar
Temel alınan koleksiyon bu BlockingCollection<T> örneğin dışında değiştirildi.
Açıklamalar
Koleksiyon boşsa, bu yöntem hemen false döndürür.
Bir öğenin kaldırılma sırası, örneği oluşturmak için kullanılan koleksiyonun türüne BlockingCollection<T> bağlıdır. Bir BlockingCollection<T> nesne oluşturduğunuzda, kullanılacak koleksiyon türünü belirtebilirsiniz. Örneğin, ilk gelen, ilk çıkar (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son gelen ilk çıkar (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. arabirimini uygulayan herhangi bir koleksiyon sınıfını IProducerConsumerCollection<T> kullanabilirsiniz. için BlockingCollection<T> varsayılan koleksiyon türü şeklindedir ConcurrentQueue<T>.
Ayrıca bkz.
Şunlara uygulanır
TryTake(T, TimeSpan)
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
Belirtilen süre içinde öğesinden BlockingCollection<T> bir öğe kaldırmayı dener.
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
Parametreler
- item
- T
Koleksiyondan kaldırılacak öğe.
- timeout
- TimeSpan
TimeSpan Öğenin kaldırılmasını beklenecek milisaniye sayısını temsil eden veya -1 milisaniyenin süresiz olarak beklemesini temsil eden birTimeSpan.
Döndürülenler
true
belirtilen süre içinde koleksiyondan bir öğe kaldırılabilirse; aksi takdirde , false
.
Özel durumlar
timeout
, -1 milisaniye dışında, sonsuz bir zaman aşımını temsil eden negatif bir sayıdır.
-veya-
timeout
Int32.MaxValue değerinden büyüktür.
Temel alınan koleksiyon bu BlockingCollection<T> örneğin dışında değiştirildi.
Açıklamalar
Bir öğenin kaldırılma sırası, örneği oluşturmak için kullanılan koleksiyonun türüne BlockingCollection<T> bağlıdır. Bir BlockingCollection<T> nesne oluşturduğunuzda, kullanılacak koleksiyon türünü belirtebilirsiniz. Örneğin, ilk gelen, ilk çıkar (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son gelen ilk çıkar (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. arabirimini uygulayan herhangi bir koleksiyon sınıfını IProducerConsumerCollection<T> kullanabilirsiniz. için BlockingCollection<T> varsayılan koleksiyon türü şeklindedir ConcurrentQueue<T>.
Ayrıca bkz.
Şunlara uygulanır
TryTake(T, Int32, CancellationToken)
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
bir iptal belirtecini BlockingCollection<T> gözlemlerken belirtilen süre içinde öğesinden öğe kaldırmaya çalışır.
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
Parametreler
- item
- T
Koleksiyondan kaldırılacak öğe.
- millisecondsTimeout
- Int32
Öğenin kaldırılmasını beklenecek milisaniye sayısı veya Infinite (-1) süresiz olarak beklenebilir.
- cancellationToken
- CancellationToken
Gözlemlenmek için bir iptal belirteci.
Döndürülenler
true
belirtilen süre içinde koleksiyondan bir öğe kaldırılabilirse; aksi takdirde , false
.
Özel durumlar
CancellationToken iptal edildi.
BlockingCollection<T> atılmış veya temel alınan CancellationTokenSource atılmıştır.
millisecondsTimeout
, -1 dışında sonsuz bir zaman aşımını temsil eden negatif bir sayıdır.
Temel alınan koleksiyon bu BlockingCollection<T> örneğin dışında değiştirildi.
Açıklamalar
Bir öğenin kaldırılma sırası, örneği oluşturmak için kullanılan koleksiyonun türüne BlockingCollection<T> bağlıdır. Bir BlockingCollection<T> nesne oluşturduğunuzda, kullanılacak koleksiyon türünü belirtebilirsiniz. Örneğin, ilk gelen, ilk çıkar (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son gelen ilk çıkar (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. arabirimini uygulayan herhangi bir koleksiyon sınıfını IProducerConsumerCollection<T> kullanabilirsiniz. için BlockingCollection<T> varsayılan koleksiyon türü şeklindedir ConcurrentQueue<T>.
Ayrıca bkz.
Şunlara uygulanır
TryTake(T, Int32)
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
Belirtilen süre içinde öğesinden BlockingCollection<T> bir öğe kaldırmayı dener.
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
Parametreler
- item
- T
Koleksiyondan kaldırılacak öğe.
- millisecondsTimeout
- Int32
Öğenin kaldırılmasını beklenecek milisaniye sayısı veya Infinite (-1) süresiz olarak beklenebilir.
Döndürülenler
true
belirtilen süre içinde koleksiyondan bir öğe kaldırılabilirse; aksi takdirde , false
.
Özel durumlar
millisecondsTimeout
, -1 dışında sonsuz bir zaman aşımını temsil eden negatif bir sayıdır.
Temel alınan koleksiyon bu BlockingCollection<T> örneğin dışında değiştirildi.
Açıklamalar
Bir öğenin kaldırılma sırası, örneği oluşturmak için kullanılan koleksiyonun türüne BlockingCollection<T> bağlıdır. Oluşturduğunuzda BlockingCollection<T>, kullanılacak koleksiyon türünü belirtebilirsiniz. Örneğin, ilk gelen, ilk çıkar (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son gelen ilk çıkar (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. arabirimini uygulayan herhangi bir koleksiyon sınıfını IProducerConsumerCollection<T> kullanabilirsiniz. için BlockingCollection<T> varsayılan koleksiyon türü şeklindedir ConcurrentQueue<T>.