Freigeben über


BlockingCollection<T>.TryTake Methode

Definition

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

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; falseandernfalls .

Ausnahmen

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; falseandernfalls .

Ausnahmen

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; falseandernfalls .

Ausnahmen

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>.

Weitere Informationen

Gilt für: