BlockingCollection<T>.TryTake BlockingCollection<T>.TryTake BlockingCollection<T>.TryTake BlockingCollection<T>.TryTake Method

Definition

Versucht, ein Element aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T>.

Überlädt

TryTake(T) TryTake(T) TryTake(T) TryTake(T)

Versucht, ein Element aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T>.

TryTake(T, TimeSpan) TryTake(T, TimeSpan) TryTake(T, TimeSpan) TryTake(T, TimeSpan)

Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T> in the specified time period.

TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken)

Versucht, ein Element unter Berücksichtigung des Abbruchtokens im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T> in the specified time period while observing a cancellation token.

TryTake(T, Int32) TryTake(T, Int32) TryTake(T, Int32) TryTake(T, Int32)

Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T> in the specified time period.

Beispiele

Im folgenden Beispiel wird die Verwendung der TryTake-Methode gezeigt.The following example shows how to use the TryTake method.

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);
        }
    }
}
'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) TryTake(T) TryTake(T) TryTake(T)

Versucht, ein Element aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T>.

public:
 bool TryTake([Runtime::InteropServices::Out] T % item);
public bool TryTake (out T item);
member this.TryTake :  -> bool
Public Function TryTake (ByRef item As T) As Boolean

Parameter

item
T T T T

Das Element, das aus der Auflistung entfernt werden soll.The item to be removed from the collection.

Gibt zurück

true, wenn ein Element entfernt werden konnte; andernfalls false.true if an item could be removed; otherwise, false.

Ausnahmen

Die zugrunde liegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.The underlying collection was modified outside of this BlockingCollection<T> instance.

Hinweise

Wenn die Auflistung leer ist, gibt diese Methode sofort "false" zurück.If the collection is empty, this method immediately returns false.

Die Reihenfolge, in dem ein Element entfernt wird, hängt der Typ der Auflistung, die zum Erstellen der BlockingCollection<T> Instanz.The order in which an item is removed depends on the type of collection used to create the BlockingCollection<T> instance. Bei der Erstellung einer BlockingCollection<T> -Objekt können Sie den Typ des zu verwendenden angeben.When you create a BlockingCollection<T> object, you can specify the type of collection to use. Beispielsweise können Sie angeben einer ConcurrentQueue<T> Objekt für das First-in, out (FIFO) erste Verhalten, oder ein ConcurrentStack<T> -Objekt für die letzte, erste LIFO-Verhalten.For example, you could specify a ConcurrentQueue<T> object for first in, first out (FIFO) behavior, or a ConcurrentStack<T> object for last in, first out (LIFO) behavior. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert.You can use any collection class that implements the IProducerConsumerCollection<T> interface. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.The default collection type for BlockingCollection<T> is ConcurrentQueue<T>.

Siehe auch

TryTake(T, TimeSpan) TryTake(T, TimeSpan) TryTake(T, TimeSpan) TryTake(T, TimeSpan)

Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T> in the specified time period.

public:
 bool TryTake([Runtime::InteropServices::Out] T % item, TimeSpan timeout);
public bool TryTake (out T item, TimeSpan timeout);
member this.TryTake :  * TimeSpan -> bool
Public Function TryTake (ByRef item As T, timeout As TimeSpan) As Boolean

Parameter

item
T T T T

Das Element, das aus der Auflistung entfernt werden soll.The item to be removed from the collection.

timeout
TimeSpan TimeSpan TimeSpan TimeSpan

Ein Objekt, dass die Anzahl der zu wartenden Millisekunden angibt, oder ein Objekt, das -1 Millisekunden zum unendlichen Warten angibt.An object that represents the number of milliseconds to wait, or an object that represents -1 milliseconds to wait indefinitely.

Gibt zurück

true, wenn ein Element innerhalb der angegebenen Zeit aus der Auflistung entfernt werden konnte, andernfalls false.true if an item could be removed from the collection within the specified time; otherwise, false.

Ausnahmen

timeout ist eine negative Zahl ungleich -1 Millisekunden, die ein unendliches Timeout darstellt.timeout is a negative number other than -1 milliseconds, which represents an infinite time-out. - oder - -or- timeout ist größer als MaxValue.timeout is greater than MaxValue.

Die zugrunde liegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.The underlying collection was modified outside of this BlockingCollection<T> instance.

Hinweise

Die Reihenfolge, in dem ein Element entfernt wird, hängt der Typ der Auflistung, die zum Erstellen der BlockingCollection<T> Instanz.The order in which an item is removed depends on the type of collection used to create the BlockingCollection<T> instance. Bei der Erstellung einer BlockingCollection<T> -Objekt können Sie den Typ des zu verwendenden angeben.When you create a BlockingCollection<T> object, you can specify the type of collection to use. Beispielsweise können Sie angeben einer ConcurrentQueue<T> Objekt für das First-in, out (FIFO) erste Verhalten, oder ein ConcurrentStack<T> -Objekt für die letzte, erste LIFO-Verhalten.For example, you could specify a ConcurrentQueue<T> object for first in, first out (FIFO) behavior, or a ConcurrentStack<T> object for last in, first out (LIFO) behavior. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert.You can use any collection class that implements the IProducerConsumerCollection<T> interface. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.The default collection type for BlockingCollection<T> is ConcurrentQueue<T>.

Siehe auch

TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken)

Versucht, ein Element unter Berücksichtigung des Abbruchtokens im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T> in the specified time period while observing a cancellation token.

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 :  * int * System.Threading.CancellationToken -> bool

Parameter

item
T T T T

Das Element, das aus der Auflistung entfernt werden soll.The item to be removed from the collection.

millisecondsTimeout
Int32 Int32 Int32 Int32

Die Anzahl von Millisekunden, die gewartet wird, oder Infinite (-1) für Warten ohne Timeout.The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Ein Abbruchtoken, das überwacht werden soll.A cancellation token to observe.

Gibt zurück

true, wenn ein Element innerhalb der angegebenen Zeit aus der Auflistung entfernt werden konnte, andernfalls false.true if an item could be removed from the collection within the specified time; otherwise, false.

Ausnahmen

Die BlockingCollection<T> wurde entfernt, oder die zugrundeliegende CancellationTokenSource wurde verworfen.The BlockingCollection<T> has been disposed or the underlying CancellationTokenSource has been disposed.

millisecondsTimeout ist eine negative Zahl, jedoch nicht -1, was einen unbeschränkten Timeout darstellt.millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

Die zugrundeliegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.The underlying collection was modified outside this BlockingCollection<T> instance.

Hinweise

Die Reihenfolge, in dem ein Element entfernt wird, hängt der Typ der Auflistung, die zum Erstellen der BlockingCollection<T> Instanz.The order in which an item is removed depends on the type of collection used to create the BlockingCollection<T> instance. Bei der Erstellung einer BlockingCollection<T> -Objekt können Sie den Typ des zu verwendenden angeben.When you create a BlockingCollection<T> object, you can specify the type of collection to use. Beispielsweise können Sie angeben einer ConcurrentQueue<T> Objekt für das First-in, out (FIFO) erste Verhalten, oder ein ConcurrentStack<T> -Objekt für die letzte, erste LIFO-Verhalten.For example, you could specify a ConcurrentQueue<T> object for first in, first out (FIFO) behavior, or a ConcurrentStack<T> object for last in, first out (LIFO) behavior. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert.You can use any collection class that implements the IProducerConsumerCollection<T> interface. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.The default collection type for BlockingCollection<T> is ConcurrentQueue<T>.

Siehe auch

TryTake(T, Int32) TryTake(T, Int32) TryTake(T, Int32) TryTake(T, Int32)

Versucht, ein Element im angegebenen Zeitraum aus der BlockingCollection<T> zu entfernen.Tries to remove an item from the BlockingCollection<T> in the specified time period.

public:
 bool TryTake([Runtime::InteropServices::Out] T % item, int millisecondsTimeout);
public bool TryTake (out T item, int millisecondsTimeout);
member this.TryTake :  * int -> bool
Public Function TryTake (ByRef item As T, millisecondsTimeout As Integer) As Boolean

Parameter

item
T T T T

Das Element, das aus der Auflistung entfernt werden soll.The item to be removed from the collection.

millisecondsTimeout
Int32 Int32 Int32 Int32

Die Anzahl von Millisekunden, die gewartet wird, oder Infinite (-1) für Warten ohne Timeout.The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

Gibt zurück

true, wenn ein Element innerhalb der angegebenen Zeit aus der Auflistung entfernt werden konnte, andernfalls false.true if an item could be removed from the collection within the specified time; otherwise, false.

Ausnahmen

millisecondsTimeout ist eine negative Zahl, jedoch nicht -1, was einen unbeschränkten Timeout darstellt.millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

Die zugrunde liegende Auflistung wurde außerhalb dieser BlockingCollection<T>-Instanz geändert.The underlying collection was modified outside of this BlockingCollection<T> instance.

Hinweise

Die Reihenfolge, in dem ein Element entfernt wird, hängt der Typ der Auflistung, die zum Erstellen der BlockingCollection<T> Instanz.The order in which an item is removed depends on the type of collection used to create the BlockingCollection<T> instance. Bei der Erstellung einer BlockingCollection<T>, können Sie den Typ des zu verwendenden angeben.When you create a BlockingCollection<T>, you can specify the type of collection to use. Beispielsweise können Sie angeben einer ConcurrentQueue<T> Objekt für das First-in, out (FIFO) erste Verhalten, oder ein ConcurrentStack<T> -Objekt für die letzte, erste LIFO-Verhalten.For example, you could specify a ConcurrentQueue<T> object for first in, first out (FIFO) behavior, or a ConcurrentStack<T> object for last in, first out (LIFO) behavior. Sie können jede Sammlungsklasse verwenden, die die IProducerConsumerCollection<T>-Schnittstelle implementiert.You can use any collection class that implements the IProducerConsumerCollection<T> interface. Der standardmäßige Sammlungstyp für BlockingCollection<T> ist ConcurrentQueue<T>.The default collection type for BlockingCollection<T> is ConcurrentQueue<T>.

Siehe auch

Gilt für: