BlockingCollection<T>.TryTake Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Versucht, ein Element aus der BlockingCollection<T> zu entfernen.
Überlädt
TryTake(T) |
Versucht, ein Element aus der BlockingCollection<T> zu entfernen. |
TryTake(T, TimeSpan) |
Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen. |
TryTake(T, Int32, CancellationToken) |
Versucht, ein Element unter Berücksichtigung des Abbruchtokens im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen. |
TryTake(T, Int32) |
Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen. |
Beispiele
Im folgenden Beispiel wird die Verwendung der TryTake-Methode gezeigt.
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)
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
Versucht, ein Element aus der BlockingCollection<T> zu entfernen.
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
Das Element, das aus der Auflistung entfernt werden soll.
Gibt zurück
true
, wenn ein Element entfernt werden konnte; andernfalls false
.
Ausnahmen
BlockingCollection<T> wurde verworfen.
Die zugrunde liegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.
Hinweise
Wenn die Auflistung leer ist, gibt diese Methode sofort false zurück.
Die Reihenfolge, in der ein Element entfernt wird, hängt vom Typ der Auflistung ab, die zum Erstellen der BlockingCollection<T> instance verwendet wird. Wenn Sie ein BlockingCollection<T> -Objekt erstellen, können Sie den Typ der zu verwendenden Auflistung angeben. Sie können z. B. ein ConcurrentQueue<T> Objekt für das Verhalten first in, first out (FIFO) oder ein ConcurrentStack<T> Objekt für das Verhalten von last in, first out (LIFO) angeben. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.
Weitere Informationen
Gilt für:
TryTake(T, TimeSpan)
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.
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
Das Element, das aus der Auflistung entfernt werden soll.
- timeout
- TimeSpan
Ein TimeSpan , der die Anzahl von Millisekunden darstellt, die auf das Entfernen des Elements gewartet werden sollen, oder ein TimeSpan , das -1 Millisekunden darstellt, um unbegrenzt zu warten.
Gibt zurück
true
, wenn ein Element innerhalb der angegebenen Zeit aus der Auflistung entfernt werden könnte; false
andernfalls .
Ausnahmen
BlockingCollection<T> wurde verworfen.
timeout
ist eine negative Zahl ungleich -1 Millisekunden, die ein unendliches Timeout darstellt.
- oder -
timeout
ist größer als Int32.MaxValue.
Die zugrunde liegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.
Hinweise
Die Reihenfolge, in der ein Element entfernt wird, hängt vom Typ der Auflistung ab, die zum Erstellen der BlockingCollection<T> instance verwendet wird. Wenn Sie ein BlockingCollection<T> -Objekt erstellen, können Sie den Typ der zu verwendenden Auflistung angeben. Sie können z. B. ein ConcurrentQueue<T> Objekt für das Verhalten first in, first out (FIFO) oder ein ConcurrentStack<T> Objekt für das Verhalten von last in, first out (LIFO) angeben. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.
Weitere Informationen
Gilt für:
TryTake(T, Int32, CancellationToken)
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
Versucht, ein Element unter Berücksichtigung des Abbruchtokens im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.
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
Das Element, das aus der Auflistung entfernt werden soll.
- millisecondsTimeout
- Int32
Die Anzahl von Millisekunden, die auf das Entfernen Infinite des Elements warten oder (-1) unbegrenzt warten.
- cancellationToken
- CancellationToken
Ein Abbruchtoken, das überwacht werden soll.
Gibt zurück
true
, wenn ein Element innerhalb der angegebenen Zeit aus der Auflistung entfernt werden könnte; false
andernfalls .
Ausnahmen
Das CancellationToken wurde abgebrochen.
Die BlockingCollection<T> wurde entfernt, oder die zugrundeliegende CancellationTokenSource wurde verworfen.
millisecondsTimeout
ist eine negative Zahl, jedoch nicht -1, was einen unbeschränkten Timeout darstellt.
Die zugrundeliegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.
Hinweise
Die Reihenfolge, in der ein Element entfernt wird, hängt vom Typ der Auflistung ab, die zum Erstellen der BlockingCollection<T> instance verwendet wird. Wenn Sie ein BlockingCollection<T> -Objekt erstellen, können Sie den Typ der zu verwendenden Auflistung angeben. Sie können z. B. ein ConcurrentQueue<T> Objekt für das Verhalten first in, first out (FIFO) oder ein ConcurrentStack<T> Objekt für das Verhalten von last in, first out (LIFO) angeben. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.
Weitere Informationen
Gilt für:
TryTake(T, Int32)
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
- Quelle:
- BlockingCollection.cs
Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.
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
Das Element, das aus der Auflistung entfernt werden soll.
- millisecondsTimeout
- Int32
Die Anzahl von Millisekunden, die auf das Entfernen Infinite des Elements warten oder (-1) unbegrenzt warten.
Gibt zurück
true
, wenn ein Element innerhalb der angegebenen Zeit aus der Auflistung entfernt werden könnte; false
andernfalls .
Ausnahmen
BlockingCollection<T> wurde verworfen.
millisecondsTimeout
ist eine negative Zahl, jedoch nicht -1, was einen unbeschränkten Timeout darstellt.
Die zugrunde liegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.
Hinweise
Die Reihenfolge, in der ein Element entfernt wird, hängt vom Typ der Auflistung ab, die zum Erstellen der BlockingCollection<T> instance verwendet wird. Wenn Sie einen BlockingCollection<T>erstellen, können Sie den Typ der zu verwendenden Sammlung angeben. Sie können z. B. ein ConcurrentQueue<T> Objekt für das Verhalten first in, first out (FIFO) oder ein ConcurrentStack<T> Objekt für das Verhalten von last in, first out (LIFO) angeben. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.