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 öğeyi kaldırmaya BlockingCollection<T>çalışır.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| TryTake(T) |
öğesinden bir öğeyi kaldırmaya BlockingCollection<T>çalışır. |
| TryTake(T, TimeSpan) |
Belirtilen zaman aralığında öğesini öğesinden BlockingCollection<T> kaldırmaya çalışır. |
| TryTake(T, Int32, CancellationToken) |
bir iptal belirtecini BlockingCollection<T> gözlemlerken belirtilen zaman aralığında öğesini öğesinden kaldırmaya çalışır. |
| TryTake(T, Int32) |
Belirtilen zaman aralığında öğesini öğesinden BlockingCollection<T> kaldırmaya çalışır. |
Ö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
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
öğesinden bir öğeyi 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 in, first out (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son, ilk çıkış (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. Arayüzü uygulayan herhangi bir koleksiyon sınıfını 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
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
Belirtilen zaman aralığında öğesini öğesinden BlockingCollection<T> kaldırmaya çalışır.
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 bir öğe koleksiyondan kaldırılabilirse; aksi takdirde , false.
Özel durumlar
timeout -1 milisaniye dışında bir negatif sayıdır ve bu da sonsuz zaman aşımını temsil eder.
-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 in, first out (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son, ilk çıkış (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. Arayüzü uygulayan herhangi bir koleksiyon sınıfını 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
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
bir iptal belirtecini BlockingCollection<T> gözlemlerken belirtilen zaman aralığında öğesini öğesinden 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 beklenecek.
- cancellationToken
- CancellationToken
Gözlemlenmek için bir iptal belirteci.
Döndürülenler
true belirtilen süre içinde bir öğe koleksiyondan 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 bir negatif sayıdır ve bu da sonsuz zaman aşımını temsil eder.
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 in, first out (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son, ilk çıkış (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. Arayüzü uygulayan herhangi bir koleksiyon sınıfını 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
- Kaynak:
- BlockingCollection.cs
- Kaynak:
- BlockingCollection.cs
Belirtilen zaman aralığında öğesini öğesinden BlockingCollection<T> kaldırmaya çalışır.
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 beklenecek.
Döndürülenler
true belirtilen süre içinde bir öğe koleksiyondan kaldırılabilirse; aksi takdirde , false.
Özel durumlar
millisecondsTimeout , -1 dışında bir negatif sayıdır ve bu da sonsuz zaman aşımını temsil eder.
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 in, first out (FIFO) davranışı için bir ConcurrentQueue<T> nesne veya son, ilk çıkış (LIFO) davranışı için bir ConcurrentStack<T> nesne belirtebilirsiniz. Arayüzü uygulayan herhangi bir koleksiyon sınıfını kullanabilirsiniz. için BlockingCollection<T> varsayılan koleksiyon türü şeklindedir ConcurrentQueue<T>.