BlockingCollection<T>.TryTake Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Tente de supprimer un élément de BlockingCollection<T>.
Surcharges
TryTake(T) |
Tente de supprimer un élément de BlockingCollection<T>. |
TryTake(T, TimeSpan) |
Tente de supprimer un élément de BlockingCollection<T> au cours de la période spécifiée. |
TryTake(T, Int32, CancellationToken) |
Tente de supprimer un élément de BlockingCollection<T> au cours de la période spécifiée tout en observant un jeton d'annulation. |
TryTake(T, Int32) |
Tente de supprimer un élément de BlockingCollection<T> au cours de la période spécifiée. |
Exemples
L'exemple suivant illustre l'utilisation de la méthode TryTake.
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)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Tente de supprimer un élément 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
Paramètres
- item
- T
Élément à supprimer de la collection.
Retours
true
si un élément peut être supprimé ; sinon, false
.
Exceptions
BlockingCollection<T> a été supprimé.
La collection sous-jacente a été modifiée en dehors de cette instance de BlockingCollection<T>.
Remarques
Si la collection est vide, cette méthode retourne immédiatement false.
L’ordre dans lequel un élément est supprimé dépend du type de collection utilisée pour créer l’instance BlockingCollection<T>. Lorsque vous créez un BlockingCollection<T> objet, vous pouvez spécifier le type de collection à utiliser. Par exemple, vous pouvez spécifier un objet pour le ConcurrentQueue<T> comportement de premier entré, premier sorti (FIFO) ou un objet pour le ConcurrentStack<T> comportement du dernier entré, premier sorti (LIFO). Vous pouvez utiliser n’importe quelle classe de collection qui implémente l’interface IProducerConsumerCollection<T>. Le type de collection par défaut pour BlockingCollection<T> est ConcurrentQueue<T>.
Voir aussi
S’applique à
TryTake(T, TimeSpan)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Tente de supprimer un élément de BlockingCollection<T> au cours de la période spécifiée.
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
Paramètres
- item
- T
Élément à supprimer de la collection.
- timeout
- TimeSpan
TimeSpan qui représente le nombre de millisecondes à attendre avant la suppression de l’élément, ou qui TimeSpan représente -1 millisecondes pour attendre indéfiniment.
Retours
true
si un élément a pu être supprimé de la collection dans le délai spécifié ; sinon, false
.
Exceptions
BlockingCollection<T> a été supprimé.
timeout
est un nombre négatif différent de -1 milliseconde, qui représente un délai d’attente infini.
-ou-
timeout
est supérieur à Int32.MaxValue.
La collection sous-jacente a été modifiée en dehors de cette instance de BlockingCollection<T>.
Remarques
L’ordre dans lequel un élément est supprimé dépend du type de collection utilisée pour créer l’instance BlockingCollection<T>. Lorsque vous créez un BlockingCollection<T> objet, vous pouvez spécifier le type de collection à utiliser. Par exemple, vous pouvez spécifier un objet pour le ConcurrentQueue<T> comportement de premier entré, premier sorti (FIFO) ou un objet pour le ConcurrentStack<T> comportement du dernier entré, premier sorti (LIFO). Vous pouvez utiliser n’importe quelle classe de collection qui implémente l’interface IProducerConsumerCollection<T>. Le type de collection par défaut pour BlockingCollection<T> est ConcurrentQueue<T>.
Voir aussi
S’applique à
TryTake(T, Int32, CancellationToken)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Tente de supprimer un élément de BlockingCollection<T> au cours de la période spécifiée tout en observant un jeton d'annulation.
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
Paramètres
- item
- T
Élément à supprimer de la collection.
- millisecondsTimeout
- Int32
Nombre de millisecondes d’attente de la suppression de l’élément ou Infinite (-1) d’attente indéfinie.
- cancellationToken
- CancellationToken
Jeton d'annulation à observer.
Retours
true
si un élément a pu être supprimé de la collection dans le délai spécifié ; sinon, false
.
Exceptions
CancellationToken a été annulé.
BlockingCollection<T> a été supprimé ou le CancellationTokenSource sous-jacent a été supprimé.
millisecondsTimeout
est un nombre négatif différent de -1, qui représente un délai d’attente infini.
La collection sous-jacente a été modifiée en dehors de cette instance de BlockingCollection<T>.
Remarques
L’ordre dans lequel un élément est supprimé dépend du type de collection utilisée pour créer l’instance BlockingCollection<T>. Lorsque vous créez un BlockingCollection<T> objet, vous pouvez spécifier le type de collection à utiliser. Par exemple, vous pouvez spécifier un objet pour le ConcurrentQueue<T> comportement de premier entré, premier sorti (FIFO) ou un objet pour le ConcurrentStack<T> comportement du dernier entré, premier sorti (LIFO). Vous pouvez utiliser n’importe quelle classe de collection qui implémente l’interface IProducerConsumerCollection<T>. Le type de collection par défaut pour BlockingCollection<T> est ConcurrentQueue<T>.
Voir aussi
S’applique à
TryTake(T, Int32)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Tente de supprimer un élément de BlockingCollection<T> au cours de la période spécifiée.
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
Paramètres
- item
- T
Élément à supprimer de la collection.
- millisecondsTimeout
- Int32
Nombre de millisecondes d’attente de la suppression de l’élément ou Infinite (-1) d’attente indéfinie.
Retours
true
si un élément a pu être supprimé de la collection dans le délai spécifié ; sinon, false
.
Exceptions
BlockingCollection<T> a été supprimé.
millisecondsTimeout
est un nombre négatif différent de -1, qui représente un délai d’attente infini.
La collection sous-jacente a été modifiée en dehors de cette instance de BlockingCollection<T>.
Remarques
L’ordre dans lequel un élément est supprimé dépend du type de collection utilisée pour créer l’instance BlockingCollection<T>. Lorsque vous créez un BlockingCollection<T>, vous pouvez spécifier le type de collection à utiliser. Par exemple, vous pouvez spécifier un objet pour le ConcurrentQueue<T> comportement de premier entré, premier sorti (FIFO) ou un objet pour le ConcurrentStack<T> comportement du dernier entré, premier sorti (LIFO). Vous pouvez utiliser n’importe quelle classe de collection qui implémente l’interface IProducerConsumerCollection<T>. Le type de collection par défaut pour BlockingCollection<T> est ConcurrentQueue<T>.