BlockingCollection<T>.TryTake Metodo

Definizione

Prova a rimuovere un elemento da BlockingCollection<T>.

Overload

TryTake(T)

Prova a rimuovere un elemento da BlockingCollection<T>.

TryTake(T, TimeSpan)

Prova rimuovere un elemento da BlockingCollection<T> entro il periodo di tempo specificato.

TryTake(T, Int32, CancellationToken)

Prova a rimuovere un elemento da BlockingCollection<T> nel periodo di tempo specificato, considerando un token di annullamento.

TryTake(T, Int32)

Prova rimuovere un elemento da BlockingCollection<T> entro il periodo di tempo specificato.

Esempio

Nell'esempio seguente viene illustrato come utilizzare il metodo 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);
        }
    }
}

TryTake(T)

Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs

Prova a rimuovere un elemento da BlockingCollection<T>.

public bool TryTake (out T item);

Parametri

item
T

Elemento da rimuovere dalla raccolta.

Restituisce

true se è stato possibile rimuovere un elemento. In caso contrario, false.

Eccezioni

L'interfaccia BlockingCollection<T> è stata eliminata.

La raccolta sottostante è stata modificata all'esterno di questa istanza di BlockingCollection<T>.

Commenti

Se la raccolta è vuota, questo metodo restituisce immediatamente false.

L'ordine in cui un elemento viene rimosso dipende dal tipo di raccolta utilizzato per creare l'istanza di BlockingCollection<T>. Quando si crea un oggetto BlockingCollection<T>, è possibile specificare il tipo di raccolta da utilizzare. Ad esempio, è possibile specificare un oggetto ConcurrentQueue<T> per il comportamento FIFO (First In, First Out) o un oggetto ConcurrentStack<T> per il comportamento LIFO (Last In, First Out). È possibile usare qualsiasi classe di raccolta che implementa l'interfaccia IProducerConsumerCollection<T>. Il tipo di raccolta predefinito per BlockingCollection<T> è ConcurrentQueue<T>.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

TryTake(T, TimeSpan)

Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs

Prova rimuovere un elemento da BlockingCollection<T> entro il periodo di tempo specificato.

public bool TryTake (out T item, TimeSpan timeout);

Parametri

item
T

Elemento da rimuovere dalla raccolta.

timeout
TimeSpan

Oggetto TimeSpan che rappresenta il numero di millisecondi di attesa per la rimozione dell'elemento o un oggetto TimeSpan che rappresenta -1 millisecondi di attesa illimitata.

Restituisce

true se un elemento può essere rimosso dalla raccolta entro il tempo specificato; in caso contrario, false.

Eccezioni

L'interfaccia BlockingCollection<T> è stata eliminata.

timeout è un numero negativo diverso da -1 millisecondi, che rappresenta un timeout infinito.

-oppure-

timeout è maggiore di Int32.MaxValue.

La raccolta sottostante è stata modificata all'esterno di questa istanza di BlockingCollection<T>.

Commenti

L'ordine in cui un elemento viene rimosso dipende dal tipo di raccolta utilizzato per creare l'istanza di BlockingCollection<T>. Quando si crea un oggetto BlockingCollection<T>, è possibile specificare il tipo di raccolta da utilizzare. Ad esempio, è possibile specificare un oggetto ConcurrentQueue<T> per il comportamento FIFO (First In, First Out) o un oggetto ConcurrentStack<T> per il comportamento LIFO (Last In, First Out). È possibile usare qualsiasi classe di raccolta che implementa l'interfaccia IProducerConsumerCollection<T>. Il tipo di raccolta predefinito per BlockingCollection<T> è ConcurrentQueue<T>.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

TryTake(T, Int32, CancellationToken)

Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs

Prova a rimuovere un elemento da BlockingCollection<T> nel periodo di tempo specificato, considerando un token di annullamento.

public bool TryTake (out T item, int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);

Parametri

item
T

Elemento da rimuovere dalla raccolta.

millisecondsTimeout
Int32

Numero di millisecondi di attesa per la rimozione dell'elemento o Infinite (-1) di attesa illimitata.

cancellationToken
CancellationToken

Token di annullamento da osservare.

Restituisce

true se un elemento può essere rimosso dalla raccolta entro il tempo specificato; in caso contrario, false.

Eccezioni

BlockingCollection<T> è stato eliminato o l'oggetto CancellationTokenSource sottostante è stato eliminato.

millisecondsTimeout è un numero negativo diverso da -1, che rappresenta un timeout infinito.

La raccolta sottostante è stata modificata all'esterno dell'istanza BlockingCollection<T>.

Commenti

L'ordine in cui un elemento viene rimosso dipende dal tipo di raccolta utilizzato per creare l'istanza di BlockingCollection<T>. Quando si crea un oggetto BlockingCollection<T>, è possibile specificare il tipo di raccolta da utilizzare. Ad esempio, è possibile specificare un oggetto ConcurrentQueue<T> per il comportamento FIFO (First In, First Out) o un oggetto ConcurrentStack<T> per il comportamento LIFO (Last In, First Out). È possibile usare qualsiasi classe di raccolta che implementa l'interfaccia IProducerConsumerCollection<T>. Il tipo di raccolta predefinito per BlockingCollection<T> è ConcurrentQueue<T>.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

TryTake(T, Int32)

Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs
Origine:
BlockingCollection.cs

Prova rimuovere un elemento da BlockingCollection<T> entro il periodo di tempo specificato.

public bool TryTake (out T item, int millisecondsTimeout);

Parametri

item
T

Elemento da rimuovere dalla raccolta.

millisecondsTimeout
Int32

Numero di millisecondi di attesa per la rimozione dell'elemento o Infinite (-1) di attesa illimitata.

Restituisce

true se un elemento può essere rimosso dalla raccolta entro il tempo specificato; in caso contrario, false.

Eccezioni

L'interfaccia BlockingCollection<T> è stata eliminata.

millisecondsTimeout è un numero negativo diverso da -1, che rappresenta un timeout infinito.

La raccolta sottostante è stata modificata all'esterno di questa istanza di BlockingCollection<T>.

Commenti

L'ordine in cui un elemento viene rimosso dipende dal tipo di raccolta utilizzato per creare l'istanza di BlockingCollection<T>. Quando si crea un BlockingCollection<T>oggetto , è possibile specificare il tipo di raccolta da usare. Ad esempio, è possibile specificare un oggetto ConcurrentQueue<T> per il comportamento FIFO (First In, First Out) o un oggetto ConcurrentStack<T> per il comportamento LIFO (Last In, First Out). È possibile usare qualsiasi classe di raccolta che implementa l'interfaccia IProducerConsumerCollection<T>. Il tipo di raccolta predefinito per BlockingCollection<T> è ConcurrentQueue<T>.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0