BlockingCollection<T>.TryTake Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Försöker ta bort ett objekt från BlockingCollection<T>.
Överlagringar
| Name | Description |
|---|---|
| TryTake(T) |
Försöker ta bort ett objekt från BlockingCollection<T>. |
| TryTake(T, TimeSpan) |
Försöker ta bort ett objekt från BlockingCollection<T> den angivna tidsperioden. |
| TryTake(T, Int32, CancellationToken) |
Försöker ta bort ett objekt från BlockingCollection<T> under den angivna tidsperioden samtidigt som en annulleringstoken observeras. |
| TryTake(T, Int32) |
Försöker ta bort ett objekt från BlockingCollection<T> den angivna tidsperioden. |
Exempel
I följande exempel visas hur du TryTake använder metoden.
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)
Försöker ta bort ett objekt från 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
Parametrar
- item
- T
Objektet som ska tas bort från samlingen.
Returer
trueom ett objekt kan tas bort. annars . false
Undantag
Har BlockingCollection<T> tagits bort.
Den underliggande samlingen ändrades utanför den här BlockingCollection<T> instansen.
Kommentarer
Om samlingen är tom returnerar den här metoden omedelbart falskt.
I vilken ordning ett objekt tas bort beror på vilken typ av samling som används för att skapa instansen BlockingCollection<T> . När du skapar ett BlockingCollection<T> objekt kan du ange vilken typ av samling som ska användas. Du kan till exempel ange ett ConcurrentQueue<T> objekt för fifo-beteende (first in, first out) eller ett ConcurrentStack<T> objekt för lifo-beteende (last in, first out). Du kan använda valfri samlingsklass som implementerar IProducerConsumerCollection<T> gränssnittet. Standardsamlingstypen för BlockingCollection<T> är ConcurrentQueue<T>.
Se även
- Tråd-säkra samlingar
- översikt över BlockingCollection
Gäller för
TryTake(T, TimeSpan)
Försöker ta bort ett objekt från BlockingCollection<T> den angivna tidsperioden.
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
Parametrar
- item
- T
Objektet som ska tas bort från samlingen.
- timeout
- TimeSpan
En TimeSpan som representerar antalet millisekunder som ska vänta tills objektet har tagits bort, eller en TimeSpan som representerar -1 millisekunder att vänta på obestämd tid.
Returer
trueom ett objekt kan tas bort från samlingen inom den angivna tiden; annars . false
Undantag
Har BlockingCollection<T> tagits bort.
timeout är ett annat negativt tal än -1 millisekunder, vilket representerar en oändlig timeout.
-eller-
timeout är större än Int32.MaxValue.
Den underliggande samlingen ändrades utanför den här BlockingCollection<T> instansen.
Kommentarer
I vilken ordning ett objekt tas bort beror på vilken typ av samling som används för att skapa instansen BlockingCollection<T> . När du skapar ett BlockingCollection<T> objekt kan du ange vilken typ av samling som ska användas. Du kan till exempel ange ett ConcurrentQueue<T> objekt för fifo-beteende (first in, first out) eller ett ConcurrentStack<T> objekt för lifo-beteende (last in, first out). Du kan använda valfri samlingsklass som implementerar IProducerConsumerCollection<T> gränssnittet. Standardsamlingstypen för BlockingCollection<T> är ConcurrentQueue<T>.
Se även
- Tråd-säkra samlingar
- översikt över BlockingCollection
Gäller för
TryTake(T, Int32, CancellationToken)
Försöker ta bort ett objekt från BlockingCollection<T> under den angivna tidsperioden samtidigt som en annulleringstoken observeras.
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
Parametrar
- item
- T
Objektet som ska tas bort från samlingen.
- millisecondsTimeout
- Int32
Antalet millisekunder som ska vänta tills objektet har tagits bort eller Infinite (-1) att vänta på obestämd tid.
- cancellationToken
- CancellationToken
En annulleringstoken att observera.
Returer
trueom ett objekt kan tas bort från samlingen inom den angivna tiden; annars . false
Undantag
Har CancellationToken avbrutits.
Har BlockingCollection<T> tagits bort eller den underliggande CancellationTokenSource har tagits bort.
millisecondsTimeout är ett annat negativt tal än -1, vilket representerar en oändlig timeout.
Den underliggande samlingen ändrades utanför den här BlockingCollection<T> instansen.
Kommentarer
I vilken ordning ett objekt tas bort beror på vilken typ av samling som används för att skapa instansen BlockingCollection<T> . När du skapar ett BlockingCollection<T> objekt kan du ange vilken typ av samling som ska användas. Du kan till exempel ange ett ConcurrentQueue<T> objekt för fifo-beteende (first in, first out) eller ett ConcurrentStack<T> objekt för lifo-beteende (last in, first out). Du kan använda valfri samlingsklass som implementerar IProducerConsumerCollection<T> gränssnittet. Standardsamlingstypen för BlockingCollection<T> är ConcurrentQueue<T>.
Se även
- Tråd-säkra samlingar
- översikt över BlockingCollection
Gäller för
TryTake(T, Int32)
Försöker ta bort ett objekt från BlockingCollection<T> den angivna tidsperioden.
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
Parametrar
- item
- T
Objektet som ska tas bort från samlingen.
- millisecondsTimeout
- Int32
Antalet millisekunder som ska vänta tills objektet har tagits bort eller Infinite (-1) att vänta på obestämd tid.
Returer
trueom ett objekt kan tas bort från samlingen inom den angivna tiden; annars . false
Undantag
Har BlockingCollection<T> tagits bort.
millisecondsTimeout är ett annat negativt tal än -1, vilket representerar en oändlig timeout.
Den underliggande samlingen ändrades utanför den här BlockingCollection<T> instansen.
Kommentarer
I vilken ordning ett objekt tas bort beror på vilken typ av samling som används för att skapa instansen BlockingCollection<T> . När du skapar en BlockingCollection<T>kan du ange vilken typ av samling som ska användas. Du kan till exempel ange ett ConcurrentQueue<T> objekt för fifo-beteende (first in, first out) eller ett ConcurrentStack<T> objekt för lifo-beteende (last in, first out). Du kan använda valfri samlingsklass som implementerar IProducerConsumerCollection<T> gränssnittet. Standardsamlingstypen för BlockingCollection<T> är ConcurrentQueue<T>.
Se även
- Tråd-säkra samlingar
- översikt över BlockingCollection