BlockingCollection<T>.TryTake Methode

Definitie

Probeert een item te verwijderen uit de BlockingCollection<T>.

Overloads

Name Description
TryTake(T)

Probeert een item te verwijderen uit de BlockingCollection<T>.

TryTake(T, TimeSpan)

Probeert een item uit de BlockingCollection<T> opgegeven periode te verwijderen.

TryTake(T, Int32, CancellationToken)

Probeert een item uit de BlockingCollection<T> opgegeven periode te verwijderen tijdens het observeren van een annuleringstoken.

TryTake(T, Int32)

Probeert een item uit de BlockingCollection<T> opgegeven periode te verwijderen.

Voorbeelden

In het volgende voorbeeld ziet u hoe u de TryTake methode gebruikt.

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)

Probeert een item te verwijderen uit de BlockingCollection<T>.

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

Parameters

item
T

Het item dat uit de verzameling moet worden verwijderd.

Retouren

true als een item kan worden verwijderd; anders, false.

Uitzonderingen

De onderliggende verzameling is buiten dit BlockingCollection<T> exemplaar gewijzigd.

Opmerkingen

Als de verzameling leeg is, retourneert deze methode onmiddellijk onwaar.

De volgorde waarin een item wordt verwijderd, is afhankelijk van het type verzameling dat wordt gebruikt om het BlockingCollection<T> exemplaar te maken. Wanneer u een BlockingCollection<T> object maakt, kunt u opgeven welk type verzameling u wilt gebruiken. U kunt bijvoorbeeld een ConcurrentQueue<T> object opgeven voor het eerste in, first out(FIFO)-gedrag of een ConcurrentStack<T> object voor het laatste in, first out-gedrag (LIFO). U kunt elke verzamelingsklasse gebruiken die de IProducerConsumerCollection<T> interface implementeert. Het standaardverzamelingstype BlockingCollection<T> is ConcurrentQueue<T>.

Zie ook

Van toepassing op

TryTake(T, TimeSpan)

Probeert een item uit de BlockingCollection<T> opgegeven periode te verwijderen.

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

Parameters

item
T

Het item dat uit de verzameling moet worden verwijderd.

timeout
TimeSpan

Een TimeSpan die het aantal milliseconden aangeeft dat moet worden gewacht totdat het item is verwijderd, of een TimeSpan waarde die -1 milliseconden vertegenwoordigt om voor onbepaalde tijd te wachten.

Retouren

true als een item binnen de opgegeven tijd uit de verzameling kan worden verwijderd; anders, false.

Uitzonderingen

timeout is een ander negatief getal dan -1 milliseconden, wat een oneindige time-out vertegenwoordigt.

– of –

timeout is groter dan Int32.MaxValue.

De onderliggende verzameling is buiten dit BlockingCollection<T> exemplaar gewijzigd.

Opmerkingen

De volgorde waarin een item wordt verwijderd, is afhankelijk van het type verzameling dat wordt gebruikt om het BlockingCollection<T> exemplaar te maken. Wanneer u een BlockingCollection<T> object maakt, kunt u opgeven welk type verzameling u wilt gebruiken. U kunt bijvoorbeeld een ConcurrentQueue<T> object opgeven voor het eerste in, first out(FIFO)-gedrag of een ConcurrentStack<T> object voor het laatste in, first out-gedrag (LIFO). U kunt elke verzamelingsklasse gebruiken die de IProducerConsumerCollection<T> interface implementeert. Het standaardverzamelingstype BlockingCollection<T> is ConcurrentQueue<T>.

Zie ook

Van toepassing op

TryTake(T, Int32, CancellationToken)

Probeert een item uit de BlockingCollection<T> opgegeven periode te verwijderen tijdens het observeren van een annuleringstoken.

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

Parameters

item
T

Het item dat uit de verzameling moet worden verwijderd.

millisecondsTimeout
Int32

Het aantal milliseconden dat moet worden gewacht totdat het item is verwijderd, of Infinite (-1) om voor onbepaalde tijd te wachten.

cancellationToken
CancellationToken

Een annuleringstoken om te observeren.

Retouren

true als een item binnen de opgegeven tijd uit de verzameling kan worden verwijderd; anders, false.

Uitzonderingen

De CancellationToken bewerking is geannuleerd.

De BlockingCollection<T> is verwijderd of de onderliggende CancellationTokenSource waarde is verwijderd.

millisecondsTimeout is een ander negatief getal dan -1, dat een oneindige time-out vertegenwoordigt.

De onderliggende verzameling is buiten dit BlockingCollection<T> exemplaar gewijzigd.

Opmerkingen

De volgorde waarin een item wordt verwijderd, is afhankelijk van het type verzameling dat wordt gebruikt om het BlockingCollection<T> exemplaar te maken. Wanneer u een BlockingCollection<T> object maakt, kunt u opgeven welk type verzameling u wilt gebruiken. U kunt bijvoorbeeld een ConcurrentQueue<T> object opgeven voor het eerste in, first out(FIFO)-gedrag of een ConcurrentStack<T> object voor het laatste in, first out-gedrag (LIFO). U kunt elke verzamelingsklasse gebruiken die de IProducerConsumerCollection<T> interface implementeert. Het standaardverzamelingstype BlockingCollection<T> is ConcurrentQueue<T>.

Zie ook

Van toepassing op

TryTake(T, Int32)

Probeert een item uit de BlockingCollection<T> opgegeven periode te verwijderen.

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

Parameters

item
T

Het item dat uit de verzameling moet worden verwijderd.

millisecondsTimeout
Int32

Het aantal milliseconden dat moet worden gewacht totdat het item is verwijderd, of Infinite (-1) om voor onbepaalde tijd te wachten.

Retouren

true als een item binnen de opgegeven tijd uit de verzameling kan worden verwijderd; anders, false.

Uitzonderingen

millisecondsTimeout is een ander negatief getal dan -1, dat een oneindige time-out vertegenwoordigt.

De onderliggende verzameling is buiten dit BlockingCollection<T> exemplaar gewijzigd.

Opmerkingen

De volgorde waarin een item wordt verwijderd, is afhankelijk van het type verzameling dat wordt gebruikt om het BlockingCollection<T> exemplaar te maken. Wanneer u een BlockingCollection<T>verzameling maakt, kunt u opgeven welk type verzameling u wilt gebruiken. U kunt bijvoorbeeld een ConcurrentQueue<T> object opgeven voor het eerste in, first out(FIFO)-gedrag of een ConcurrentStack<T> object voor het laatste in, first out-gedrag (LIFO). U kunt elke verzamelingsklasse gebruiken die de IProducerConsumerCollection<T> interface implementeert. Het standaardverzamelingstype BlockingCollection<T> is ConcurrentQueue<T>.

Zie ook

Van toepassing op