BlockingCollection<T>.TryTake Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Intenta quitar un elemento de BlockingCollection<T>.
Sobrecargas
TryTake(T) |
Intenta quitar un elemento de BlockingCollection<T>. |
TryTake(T, TimeSpan) |
Intenta quitar un elemento de BlockingCollection<T> dentro del período de tiempo especificado. |
TryTake(T, Int32, CancellationToken) |
Intenta quitar un elemento de BlockingCollection<T> dentro del período de tiempo especificado, observando un token de cancelación. |
TryTake(T, Int32) |
Intenta quitar un elemento de BlockingCollection<T> dentro del período de tiempo especificado. |
Ejemplos
En el siguiente ejemplo, se muestra cómo utilizar el método 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
Intenta quitar un elemento 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
Parámetros
- item
- T
Elemento que va a quitarse de la colección.
Devoluciones
true
si se pudo quitar un elemento; en caso contrario, false
.
Excepciones
Se ha eliminado BlockingCollection<T>.
La colección subyacente se modificó fuera de esta instancia de BlockingCollection<T>.
Comentarios
Si la colección está vacía, este método devuelve inmediatamente false.
El orden en que se quita un elemento depende del tipo de colección usado para crear la instancia de BlockingCollection<T>. Cuando crea un objeto BlockingCollection<T>, puede especificar el tipo de colección que se va a usar. Por ejemplo, puede especificar un objeto ConcurrentQueue<T> para un comportamiento FIFO (primero en entrar, primero en salir) o un objeto ConcurrentStack<T> para un comportamiento LIFO (último en entrar, primero en salir). Puede usar cualquier clase de colección que implemente la interfaz IProducerConsumerCollection<T>. El tipo de colección predeterminado para BlockingCollection<T> es ConcurrentQueue<T>.
Consulte también
Se aplica a
TryTake(T, TimeSpan)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Intenta quitar un elemento de BlockingCollection<T> dentro del período de tiempo especificado.
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
Parámetros
- item
- T
Elemento que va a quitarse de la colección.
- timeout
- TimeSpan
que TimeSpan representa el número de milisegundos que se van a esperar a que se quite el elemento, o que TimeSpan representa -1 milisegundos para esperar indefinidamente.
Devoluciones
true
si se podría quitar un elemento de la colección dentro del tiempo especificado; de lo contrario, false
.
Excepciones
Se ha eliminado BlockingCollection<T>.
timeout
es un número negativo distinto de -1 milisegundos, que representa un tiempo de espera infinito.
O bien
timeout
es mayor que Int32.MaxValue.
La colección subyacente se modificó fuera de esta instancia de BlockingCollection<T>.
Comentarios
El orden en que se quita un elemento depende del tipo de colección usado para crear la instancia de BlockingCollection<T>. Cuando crea un objeto BlockingCollection<T>, puede especificar el tipo de colección que se va a usar. Por ejemplo, puede especificar un objeto ConcurrentQueue<T> para un comportamiento FIFO (primero en entrar, primero en salir) o un objeto ConcurrentStack<T> para un comportamiento LIFO (último en entrar, primero en salir). Puede usar cualquier clase de colección que implemente la interfaz IProducerConsumerCollection<T>. El tipo de colección predeterminado para BlockingCollection<T> es ConcurrentQueue<T>.
Consulte también
Se aplica a
TryTake(T, Int32, CancellationToken)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Intenta quitar un elemento de BlockingCollection<T> dentro del período de tiempo especificado, observando un token de cancelación.
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
Parámetros
- item
- T
Elemento que va a quitarse de la colección.
- millisecondsTimeout
- Int32
El número de milisegundos que se van a esperar a que se quite el elemento o Infinite (-1) espere indefinidamente.
- cancellationToken
- CancellationToken
Token de cancelación que se va a observar.
Devoluciones
true
si se podría quitar un elemento de la colección dentro del tiempo especificado; de lo contrario, false
.
Excepciones
El CancellationToken se ha cancelado.
La BlockingCollection<T> se ha eliminado o el CancellationTokenSource subyacente se ha eliminado.
millisecondsTimeout
es un número negativo distinto de-1, que representa un tiempo de espera infinito.
La colección subyacente se modificó fuera de esta instancia de BlockingCollection<T>.
Comentarios
El orden en que se quita un elemento depende del tipo de colección usado para crear la instancia de BlockingCollection<T>. Cuando crea un objeto BlockingCollection<T>, puede especificar el tipo de colección que se va a usar. Por ejemplo, puede especificar un objeto ConcurrentQueue<T> para un comportamiento FIFO (primero en entrar, primero en salir) o un objeto ConcurrentStack<T> para un comportamiento LIFO (último en entrar, primero en salir). Puede usar cualquier clase de colección que implemente la interfaz IProducerConsumerCollection<T>. El tipo de colección predeterminado para BlockingCollection<T> es ConcurrentQueue<T>.
Consulte también
Se aplica a
TryTake(T, Int32)
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
- Source:
- BlockingCollection.cs
Intenta quitar un elemento de BlockingCollection<T> dentro del período de tiempo especificado.
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
Parámetros
- item
- T
Elemento que va a quitarse de la colección.
- millisecondsTimeout
- Int32
El número de milisegundos que se van a esperar a que se quite el elemento o Infinite (-1) espere indefinidamente.
Devoluciones
true
si se podría quitar un elemento de la colección dentro del tiempo especificado; de lo contrario, false
.
Excepciones
Se ha eliminado BlockingCollection<T>.
millisecondsTimeout
es un número negativo distinto de-1, que representa un tiempo de espera infinito.
La colección subyacente se modificó fuera de esta instancia de BlockingCollection<T>.
Comentarios
El orden en que se quita un elemento depende del tipo de colección usado para crear la instancia de BlockingCollection<T>. Al crear un BlockingCollection<T>, puede especificar el tipo de colección que se va a usar. Por ejemplo, puede especificar un objeto ConcurrentQueue<T> para un comportamiento FIFO (primero en entrar, primero en salir) o un objeto ConcurrentStack<T> para un comportamiento LIFO (último en entrar, primero en salir). Puede usar cualquier clase de colección que implemente la interfaz IProducerConsumerCollection<T>. El tipo de colección predeterminado para BlockingCollection<T> es ConcurrentQueue<T>.