BlockingCollection<T>.TryTake Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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 BlockingCollection<T> is verwijderd.
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
- Thread-Safe Verzamelingen
- Overzicht van BlockingCollection
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
De BlockingCollection<T> is verwijderd.
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
- Thread-Safe Verzamelingen
- Overzicht van BlockingCollection
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
- Thread-Safe Verzamelingen
- Overzicht van BlockingCollection
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
De BlockingCollection<T> 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>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
- Thread-Safe Verzamelingen
- Overzicht van BlockingCollection