BlockingCollection<T> BlockingCollection<T> BlockingCollection<T> BlockingCollection<T> Class

Определение

Предоставляет возможности блокировки и ограничения для потокобезопасных коллекций, реализующих IProducerConsumerCollection<T>.Provides blocking and bounding capabilities for thread-safe collections that implement IProducerConsumerCollection<T>.

generic <typename T>
public ref class BlockingCollection : IDisposable, System::Collections::Generic::IEnumerable<T>, System::Collections::Generic::IReadOnlyCollection<T>, System::Collections::ICollection
[System.Runtime.InteropServices.ComVisible(false)]
public class BlockingCollection<T> : IDisposable, System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.IReadOnlyCollection<T>, System.Collections.ICollection
type BlockingCollection<'T> = class
    interface seq<'T>
    interface ICollection
    interface IDisposable
    interface IReadOnlyCollection<'T>
    interface IEnumerable
Public Class BlockingCollection(Of T)
Implements ICollection, IDisposable, IEnumerable(Of T), IReadOnlyCollection(Of T)

Параметры типа

T

Тип элементов в коллекции.The type of elements in the collection.

Наследование
BlockingCollection<T>BlockingCollection<T>BlockingCollection<T>BlockingCollection<T>
Атрибуты
Реализации

Примеры

В следующем примере показано, как добавлять и извлекать элементы одновременно из заблокированной коллекции:The following example shows how to add and take items concurrently from a blocking collection:

using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;

class BlockingCollectionDemo
{
    static async Task Main()
    {
        await AddTakeDemo.BC_AddTakeCompleteAdding();
        TryTakeDemo.BC_TryTake();
        FromToAnyDemo.BC_FromToAny();
        await ConsumingEnumerableDemo.BC_GetConsumingEnumerable();
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
class AddTakeDemo
{
    // Demonstrates:
    //      BlockingCollection<T>.Add()
    //      BlockingCollection<T>.Take()
    //      BlockingCollection<T>.CompleteAdding()
    public static async Task BC_AddTakeCompleteAdding()
    {
        using (BlockingCollection<int> bc = new BlockingCollection<int>())
        {
            // Spin up a Task to populate the BlockingCollection
            using (Task t1 = Task.Run(() =>
            {
                bc.Add(1);
                bc.Add(2);
                bc.Add(3);
                bc.CompleteAdding();
            }))
            {
                // Spin up a Task to consume the BlockingCollection
                using (Task t2 = Task.Run(() =>
                {
                    try
                    {
                        // Consume consume the BlockingCollection
                        while (true) Console.WriteLine(bc.Take());
                    }
                    catch (InvalidOperationException)
                    {
                        // An InvalidOperationException means that Take() was called on a completed collection
                        Console.WriteLine("That's All!");
                    }
                }))
                {
                    await Task.WhenAll(t1, t2);
                }
            }
        }
    }
}

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);
        }
    }
}

class FromToAnyDemo
{
    // Demonstrates:
    //      Bounded BlockingCollection<T>
    //      BlockingCollection<T>.TryAddToAny()
    //      BlockingCollection<T>.TryTakeFromAny()
    public static void BC_FromToAny()
    {
        BlockingCollection<int>[] bcs = new BlockingCollection<int>[2];
        bcs[0] = new BlockingCollection<int>(5); // collection bounded to 5 items
        bcs[1] = new BlockingCollection<int>(5); // collection bounded to 5 items

        // Should be able to add 10 items w/o blocking
        int numFailures = 0;
        for (int i = 0; i < 10; i++)
        {
            if (BlockingCollection<int>.TryAddToAny(bcs, i) == -1) numFailures++;
        }
        Console.WriteLine("TryAddToAny: {0} failures (should be 0)", numFailures);

        // Should be able to retrieve 10 items
        int numItems = 0;
        int item;
        while (BlockingCollection<int>.TryTakeFromAny(bcs, out item) != -1) numItems++;
        Console.WriteLine("TryTakeFromAny: retrieved {0} items (should be 10)", numItems);
    }
}

class ConsumingEnumerableDemo
{
    // Demonstrates:
    //      BlockingCollection<T>.Add()
    //      BlockingCollection<T>.CompleteAdding()
    //      BlockingCollection<T>.GetConsumingEnumerable()
    public static async Task BC_GetConsumingEnumerable()
    {
        using (BlockingCollection<int> bc = new BlockingCollection<int>())
        {
            // Kick off a producer task
            await Task.Run(async () =>
            {
                for (int i = 0; i < 10; i++)
                {
                    bc.Add(i);
                    await Task.Delay(100); // sleep 100 ms between adds
                }

                // Need to do this to keep foreach below from hanging
                bc.CompleteAdding();
            });

            // Now consume the blocking collection with foreach.
            // Use bc.GetConsumingEnumerable() instead of just bc because the
            // former will block waiting for completion and the latter will
            // simply take a snapshot of the current state of the underlying collection.
            foreach (var item in bc.GetConsumingEnumerable())
            {
                Console.WriteLine(item);
            }
        }
    }
}
Imports System.Threading.Tasks
Imports System.Collections.Concurrent
Imports System.Threading

Class BlockingCollectionDemo
    Shared Sub Main()
        AddTakeDemo.BC_AddTakeCompleteAdding()
        TryTakeDemo.BC_TryTake()
        ToAnyDemo.BC_ToAny()
        ConsumingEnumerableDemo.BC_GetConsumingEnumerable()
        ' Keep the console window open in debug mode
        Console.WriteLine("Press any key to exit.")
        Console.ReadKey()
    End Sub
End Class

Class AddTakeDemo

    ' Demonstrates:
    ' BlockingCollection<T>.Add()
    ' BlockingCollection<T>.Take()
    ' BlockingCollection<T>.CompleteAdding()
    Shared Sub BC_AddTakeCompleteAdding()
        Using bc As New BlockingCollection(Of Integer)()

            ' Spin up a Task to populate the BlockingCollection 
            Using t1 As Task = Task.Factory.StartNew(
                Sub()
                    bc.Add(1)
                    bc.Add(2)
                    bc.Add(3)
                    bc.CompleteAdding()
                End Sub)
                ' Spin up a Task to consume the BlockingCollection
                Using t2 As Task = Task.Factory.StartNew(
                Sub()
                    Try
                        ' Consume the BlockingCollection
                        While True
                            Console.WriteLine(bc.Take())
                        End While
                    Catch generatedExceptionName As InvalidOperationException
                        ' An InvalidOperationException means that Take() was called on a completed collection
                        Console.WriteLine("That's All!")
                    End Try
                End Sub)

                    Task.WaitAll(t1, t2)
                End Using
            End Using
        End Using
    End Sub



End Class

'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

'Imports System.Threading.Tasks
'Imports System.Collections.Concurrent

' Demonstrates:
' Bounded BlockingCollection<T>
' BlockingCollection<T>.TryAddToAny()
' BlockingCollection<T>.TryTakeFromAny()
Class ToAnyDemo
    Shared Sub BC_ToAny()
        Dim bcs As BlockingCollection(Of Integer)() = New BlockingCollection(Of Integer)(1) {}
        bcs(0) = New BlockingCollection(Of Integer)(5)
        ' collection bounded to 5 items
        bcs(1) = New BlockingCollection(Of Integer)(5)
        ' collection bounded to 5 items
        ' Should be able to add 10 items w/o blocking
        Dim numFailures As Integer = 0
        For i As Integer = 0 To 9
            If BlockingCollection(Of Integer).TryAddToAny(bcs, i) = -1 Then
                numFailures += 1
            End If
        Next
        Console.WriteLine("TryAddToAny: {0} failures (should be 0)", numFailures)

        ' Should be able to retrieve 10 items
        Dim numItems As Integer = 0
        Dim item As Integer
        While BlockingCollection(Of Integer).TryTakeFromAny(bcs, item) <> -1
            numItems += 1
        End While
        Console.WriteLine("TryTakeFromAny: retrieved {0} items (should be 10)", numItems)
    End Sub
End Class

'Imports System.Threading.Tasks
'Imports System.Collections.Concurrent

' Demonstrates:
' BlockingCollection<T>.Add()
' BlockingCollection<T>.CompleteAdding()
' BlockingCollection<T>.GetConsumingEnumerable()

Class ConsumingEnumerableDemo
    Shared Sub BC_GetConsumingEnumerable()
        Using bc As New BlockingCollection(Of Integer)()

            ' Kick off a producer task
            Task.Factory.StartNew(
                Sub()
                    For i As Integer = 0 To 9
                        bc.Add(i)
                        ' sleep 100 ms between adds
                        Thread.Sleep(100)
                    Next

                    ' Need to do this to keep foreach below from not responding.
                    bc.CompleteAdding()
                End Sub)
            ' Now consume the blocking collection with foreach.
            ' Use bc.GetConsumingEnumerable() instead of just bc because the
            ' former will block waiting for completion and the latter will
            ' simply take a snapshot of the current state of the underlying collection.
            For Each item In bc.GetConsumingEnumerable()
                Console.WriteLine(item)
            Next
        End Using
    End Sub
End Class

Комментарии

BlockingCollection<T> — Это класс потокобезопасную коллекцию, который предоставляет следующие возможности:BlockingCollection<T> is a thread-safe collection class that provides the following:

  • Реализацию шаблона производитель/потребитель; BlockingCollection<T> является оболочкой для IProducerConsumerCollection<T> интерфейс.An implementation of the producer/consumer pattern; BlockingCollection<T> is a wrapper for the IProducerConsumerCollection<T> interface.

  • Параллельные события добавления и удаления элементов из нескольких потоков с Add и Take методы.Concurrent addition and removal of items from multiple threads with the Add and Take methods.

  • Ограниченной коллекции, которая блокирует Add и Take операции после создания коллекции full или empty.A bounded collection that blocks Add and Take operations when the collection is full or empty.

  • Отмена Add или Take операций с помощью CancellationToken объекта в TryAdd или TryTake метод.Cancellation of Add or Take operations by using a CancellationToken object in the TryAdd or TryTake method.

Важно!

Этот тип реализует IDisposable интерфейс.This type implements the IDisposable interface. Когда вы закончите, используя тип, следует освободить его прямо или косвенно.When you have finished using the type, you should dispose of it either directly or indirectly. Чтобы удалить тип напрямую, вызовите его Dispose метод в try / catch блока.To dispose of the type directly, call its Dispose method in a try/catch block. Чтобы избавиться от его косвенно, используйте языковой конструкции, такие как using (в C#) или Using (в Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Дополнительные сведения см. в разделе «С помощью объекта, реализует IDisposable» IDisposable разделу интерфейса.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic. Кроме того, обратите внимание, что Dispose() метод не является потокобезопасным.Also, note that the Dispose() method is not thread-safe. Все другие открытые и защищенные члены BlockingCollection<T> являются потокобезопасными и могут быть использованы одновременно из нескольких потоков.All other public and protected members of BlockingCollection<T> are thread-safe and may be used concurrently from multiple threads.

IProducerConsumerCollection<T> Представляет коллекцию, которая позволяет поточно ориентированные добавления и удаления данных.IProducerConsumerCollection<T> represents a collection that allows for thread-safe adding and removal of data. BlockingCollection<T> используется как оболочка для IProducerConsumerCollection<T> экземпляром и разрешает попытки удаления из коллекции блокировать выполнение до данных может быть удален.BlockingCollection<T> is used as a wrapper for an IProducerConsumerCollection<T> instance, and allows removal attempts from the collection to block until data is available to be removed. Аналогично, можно создать BlockingCollection<T> для применяет верхний предел на число данных элементов, допустимое в IProducerConsumerCollection<T>; попытки добавления в коллекцию могут блокироваться до места для хранения добавленные элементы.Similarly, you can create a BlockingCollection<T> to enforce an upper bound on the number of data elements allowed in the IProducerConsumerCollection<T>; addition attempts to the collection may then block until space is available to store the added items. Таким образом BlockingCollection<T> похож на традиционных блокирующей очереди структуру данных, за исключением того, что базовый механизм хранения данных абстрагируется как IProducerConsumerCollection<T>.In this manner, BlockingCollection<T> is similar to a traditional blocking queue data structure, except that the underlying data storage mechanism is abstracted away as an IProducerConsumerCollection<T>.

BlockingCollection<T> поддерживает границы и блокировку.BlockingCollection<T> supports bounding and blocking. Поддержка границ означает, что можно задать максимальную емкость коллекции.Bounding means that you can set the maximum capacity of the collection. Ограничивающий важны в ряде сценариев, так как он позволяет контролировать максимальный размер коллекции в памяти, и оно не позволяет которых потоки-создатели слишком сильно обгоняют потоки-потребители. Несколько потоков или задач можно добавить элементы к коллекции параллельно, и если коллекция достигает максимальной емкости, которых потоки-создатели будет блокироваться до элемент удаляется.Bounding is important in certain scenarios because it enables you to control the maximum size of the collection in memory, and it prevents the producing threads from moving too far ahead of the consuming threads.Multiple threads or tasks can add items to the collection concurrently, and if the collection reaches its specified maximum capacity, the producing threads will block until an item is removed. Элементы коллекции могут параллельно удаляться несколькими потребителями. Если коллекция становится пустой, то потоки-потребители перейдут в состояние блокировки, пока поток-создатель не добавит хотя бы один элемент.Multiple consumers can remove items concurrently, and if the collection becomes empty, the consuming threads will block until a producer adds an item. Поток-создатель может вызвать CompleteAdding метод, чтобы указать, что другие элементы не будут добавлены.A producing thread can call the CompleteAdding method to indicate that no more items will be added. Потребители могут отслеживать свойство IsCompleted, позволяющее определить, что коллекция опустела, а новые элементы добавляться не будут.Consumers monitor the IsCompleted property to know when the collection is empty and no more items will be added.

Add и Take операции обычно выполняются в цикле.Add and Take operations are typically performed in a loop. Отменить цикл можно, передав CancellationToken объект TryAdd или TryTake метод, а затем проверить значение токена IsCancellationRequested каждой итерации.You can cancel a loop by passing in a CancellationToken object to the TryAdd or TryTake method, and then checking the value of the token's IsCancellationRequested property on each iteration. Если значение равно true, это разработчик может обработать запрос отмены, освободив ресурсы и выхода из цикла.If the value is true, it is up to you to respond the cancellation request by cleaning up any resources and exiting the loop.

При создании BlockingCollection<T> объекта, можно указать не только ограничиваемую емкость, но также тип коллекции для использования.When you create a BlockingCollection<T> object, you can specify not only the bounded capacity but also the type of collection to use. Например, можно задать объект ConcurrentQueue<T> для использования принципа "первым поступил — первым обслужен", или объект ConcurrentStack<T> для использования принципа "последним поступил — первым обслужен".For example, you could specify a ConcurrentQueue<T> object for first in, first out (FIFO) behavior, or a ConcurrentStack<T> object for last in, first out (LIFO) behavior. Использовать можно любой класс коллекции, реализующий интерфейс IProducerConsumerCollection<T>.You can use any collection class that implements the IProducerConsumerCollection<T> interface. Тип коллекции, используемый в классе BlockingCollection<T> по умолчанию — это ConcurrentQueue<T>.The default collection type for BlockingCollection<T> is ConcurrentQueue<T>.

Не изменяйте напрямую базовой коллекции.Do not modify the underlying collection directly. Используйте BlockingCollection<T> методы для добавления или удаления элементов.Use BlockingCollection<T> methods to add or remove elements. BlockingCollection<T> Объекта могут быть повреждены при изменении базовой коллекции напрямую.The BlockingCollection<T> object can become corrupted if you change the underlying collection directly.

Конструкторы

BlockingCollection<T>() BlockingCollection<T>() BlockingCollection<T>() BlockingCollection<T>()

Инициализирует новый экземпляр класса BlockingCollection<T> без верхней границы.Initializes a new instance of the BlockingCollection<T> class without an upper-bound.

BlockingCollection<T>(Int32) BlockingCollection<T>(Int32) BlockingCollection<T>(Int32) BlockingCollection<T>(Int32)

Инициализирует новый экземпляр класса BlockingCollection<T> с указанной верхней границей.Initializes a new instance of the BlockingCollection<T> class with the specified upper-bound.

BlockingCollection<T>(IProducerConsumerCollection<T>) BlockingCollection<T>(IProducerConsumerCollection<T>) BlockingCollection<T>(IProducerConsumerCollection<T>) BlockingCollection<T>(IProducerConsumerCollection<T>)

Инициализирует новый экземпляр класса BlockingCollection<T> без верхней границы, используя предоставленную коллекцию IProducerConsumerCollection<T> в качестве базового хранилища данных.Initializes a new instance of the BlockingCollection<T> class without an upper-bound and using the provided IProducerConsumerCollection<T> as its underlying data store.

BlockingCollection<T>(IProducerConsumerCollection<T>, Int32) BlockingCollection<T>(IProducerConsumerCollection<T>, Int32) BlockingCollection<T>(IProducerConsumerCollection<T>, Int32) BlockingCollection<T>(IProducerConsumerCollection<T>, Int32)

Инициализирует новый экземпляр класса BlockingCollection<T> с указанной верхней границей, используя предоставленную коллекцию IProducerConsumerCollection<T> в качестве базового хранилища данных.Initializes a new instance of the BlockingCollection<T> class with the specified upper-bound and using the provided IProducerConsumerCollection<T> as its underlying data store.

Свойства

BoundedCapacity BoundedCapacity BoundedCapacity BoundedCapacity

Получает предельную емкость данного экземпляра BlockingCollection<T>.Gets the bounded capacity of this BlockingCollection<T> instance.

Count Count Count Count

Возвращает число элементов, содержащихся в списке BlockingCollection<T>.Gets the number of items contained in the BlockingCollection<T>.

IsAddingCompleted IsAddingCompleted IsAddingCompleted IsAddingCompleted

Возвращает значение, указывающее, помечена ли данная коллекция BlockingCollection<T> как закрытая для добавления элементов.Gets whether this BlockingCollection<T> has been marked as complete for adding.

IsCompleted IsCompleted IsCompleted IsCompleted

Возвращает значение, указывающее, помечена ли данная коллекция BlockingCollection<T> как закрытая для добавления элементов и является ли она пустой.Gets whether this BlockingCollection<T> has been marked as complete for adding and is empty.

Методы

Add(T) Add(T) Add(T) Add(T)

Добавляет элемент в коллекцию BlockingCollection<T>.Adds the item to the BlockingCollection<T>.

Add(T, CancellationToken) Add(T, CancellationToken) Add(T, CancellationToken) Add(T, CancellationToken)

Добавляет элемент в коллекцию BlockingCollection<T>.Adds the item to the BlockingCollection<T>.

AddToAny(BlockingCollection<T>[], T) AddToAny(BlockingCollection<T>[], T) AddToAny(BlockingCollection<T>[], T) AddToAny(BlockingCollection<T>[], T)

Добавляет указанный элемент в один из указанных экземпляров BlockingCollection<T>.Adds the specified item to any one of the specified BlockingCollection<T> instances.

AddToAny(BlockingCollection<T>[], T, CancellationToken) AddToAny(BlockingCollection<T>[], T, CancellationToken) AddToAny(BlockingCollection<T>[], T, CancellationToken) AddToAny(BlockingCollection<T>[], T, CancellationToken)

Добавляет указанный элемент в один из указанных экземпляров BlockingCollection<T>.Adds the specified item to any one of the specified BlockingCollection<T> instances.

CompleteAdding() CompleteAdding() CompleteAdding() CompleteAdding()

Помечает экземпляры BlockingCollection<T> как не допускающие добавления дополнительных элементов.Marks the BlockingCollection<T> instances as not accepting any more additions.

CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32)

Копирует все элементы из экземпляра BlockingCollection<T> в совместимый одномерный массив начиная с указанного индекса в целевом массиве.Copies all of the items in the BlockingCollection<T> instance to a compatible one-dimensional array, starting at the specified index of the target array.

Dispose() Dispose() Dispose() Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса BlockingCollection<T>.Releases all resources used by the current instance of the BlockingCollection<T> class.

Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Освобождает ресурсы, используемые экземпляром BlockingCollection<T>.Releases resources used by the BlockingCollection<T> instance.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetConsumingEnumerable() GetConsumingEnumerable() GetConsumingEnumerable() GetConsumingEnumerable()

Предоставляет получающий интерфейс IEnumerator<T> для элементов коллекции.Provides a consuming IEnumerator<T> for items in the collection.

GetConsumingEnumerable(CancellationToken) GetConsumingEnumerable(CancellationToken) GetConsumingEnumerable(CancellationToken) GetConsumingEnumerable(CancellationToken)

Предоставляет получающий интерфейс IEnumerable<T> для элементов коллекции.Provides a consuming IEnumerable<T> for items in the collection.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
Take() Take() Take() Take()

Удаляет элемент из BlockingCollection<T>.Removes an item from the BlockingCollection<T>.

Take(CancellationToken) Take(CancellationToken) Take(CancellationToken) Take(CancellationToken)

Удаляет элемент из BlockingCollection<T>.Removes an item from the BlockingCollection<T>.

TakeFromAny(BlockingCollection<T>[], T) TakeFromAny(BlockingCollection<T>[], T) TakeFromAny(BlockingCollection<T>[], T) TakeFromAny(BlockingCollection<T>[], T)

Извлекает элемент из любого из указанных экземпляров BlockingCollection<T>.Takes an item from any one of the specified BlockingCollection<T> instances.

TakeFromAny(BlockingCollection<T>[], T, CancellationToken) TakeFromAny(BlockingCollection<T>[], T, CancellationToken) TakeFromAny(BlockingCollection<T>[], T, CancellationToken) TakeFromAny(BlockingCollection<T>[], T, CancellationToken)

Извлекает элемент из любого из указанных экземпляров BlockingCollection<T>, контролируя указанный маркер отмены.Takes an item from any one of the specified BlockingCollection<T> instances while observing the specified cancellation token.

ToArray() ToArray() ToArray() ToArray()

Копирует элементы из экземпляра BlockingCollection<T> в новый массив.Copies the items from the BlockingCollection<T> instance into a new array.

ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)
TryAdd(T) TryAdd(T) TryAdd(T) TryAdd(T)

Пытается добавить указанный элемент в BlockingCollection<T>.Tries to add the specified item to the BlockingCollection<T>.

TryAdd(T, Int32) TryAdd(T, Int32) TryAdd(T, Int32) TryAdd(T, Int32)

Пытается добавить указанный элемент в коллекцию BlockingCollection<T> в течение указанного периода времени.Tries to add the specified item to the BlockingCollection<T> within the specified time period.

TryAdd(T, Int32, CancellationToken) TryAdd(T, Int32, CancellationToken) TryAdd(T, Int32, CancellationToken) TryAdd(T, Int32, CancellationToken)

Пытается добавить указанный элемент в коллекцию BlockingCollection<T> в течение указанного периода времени, контролируя маркер отмены.Tries to add the specified item to the BlockingCollection<T> within the specified time period, while observing a cancellation token.

TryAdd(T, TimeSpan) TryAdd(T, TimeSpan) TryAdd(T, TimeSpan) TryAdd(T, TimeSpan)

Пытается добавить указанный элемент в BlockingCollection<T>.Tries to add the specified item to the BlockingCollection<T>.

TryAddToAny(BlockingCollection<T>[], T) TryAddToAny(BlockingCollection<T>[], T) TryAddToAny(BlockingCollection<T>[], T) TryAddToAny(BlockingCollection<T>[], T)

Пытается добавить указанный элемент в один из указанных экземпляров BlockingCollection<T>.Tries to add the specified item to any one of the specified BlockingCollection<T> instances.

TryAddToAny(BlockingCollection<T>[], T, Int32) TryAddToAny(BlockingCollection<T>[], T, Int32) TryAddToAny(BlockingCollection<T>[], T, Int32) TryAddToAny(BlockingCollection<T>[], T, Int32)

Пытается добавить указанный элемент в один из указанных экземпляров BlockingCollection<T>.Tries to add the specified item to any one of the specified BlockingCollection<T> instances.

TryAddToAny(BlockingCollection<T>[], T, Int32, CancellationToken) TryAddToAny(BlockingCollection<T>[], T, Int32, CancellationToken) TryAddToAny(BlockingCollection<T>[], T, Int32, CancellationToken) TryAddToAny(BlockingCollection<T>[], T, Int32, CancellationToken)

Пытается добавить указанный элемент в один из указанных экземпляров BlockingCollection<T>.Tries to add the specified item to any one of the specified BlockingCollection<T> instances.

TryAddToAny(BlockingCollection<T>[], T, TimeSpan) TryAddToAny(BlockingCollection<T>[], T, TimeSpan) TryAddToAny(BlockingCollection<T>[], T, TimeSpan) TryAddToAny(BlockingCollection<T>[], T, TimeSpan)

Пытается добавить указанный элемент в любой из указанных экземпляров BlockingCollection<T>, контролируя указанный маркер отмены.Tries to add the specified item to any one of the specified BlockingCollection<T> instances while observing the specified cancellation token.

TryTake(T) TryTake(T) TryTake(T) TryTake(T)

Пытается удалить элемент из коллекции BlockingCollection<T>.Tries to remove an item from the BlockingCollection<T>.

TryTake(T, Int32) TryTake(T, Int32) TryTake(T, Int32) TryTake(T, Int32)

Пытается удалить элемент из коллекции BlockingCollection<T> в течение указанного периода времени.Tries to remove an item from the BlockingCollection<T> in the specified time period.

TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken) TryTake(T, Int32, CancellationToken)

Пытается удалить элемент из коллекции BlockingCollection<T> в течение указанного периода времени, контролируя маркер отмены.Tries to remove an item from the BlockingCollection<T> in the specified time period while observing a cancellation token.

TryTake(T, TimeSpan) TryTake(T, TimeSpan) TryTake(T, TimeSpan) TryTake(T, TimeSpan)

Пытается удалить элемент из коллекции BlockingCollection<T> в течение указанного периода времени.Tries to remove an item from the BlockingCollection<T> in the specified time period.

TryTakeFromAny(BlockingCollection<T>[], T) TryTakeFromAny(BlockingCollection<T>[], T) TryTakeFromAny(BlockingCollection<T>[], T) TryTakeFromAny(BlockingCollection<T>[], T)

Пытается удалить элемент из любого из указанных экземпляров BlockingCollection<T>.Tries to remove an item from any one of the specified BlockingCollection<T> instances.

TryTakeFromAny(BlockingCollection<T>[], T, Int32) TryTakeFromAny(BlockingCollection<T>[], T, Int32) TryTakeFromAny(BlockingCollection<T>[], T, Int32) TryTakeFromAny(BlockingCollection<T>[], T, Int32)

Пытается удалить элемент из любого из указанных экземпляров BlockingCollection<T>.Tries to remove an item from any one of the specified BlockingCollection<T> instances.

TryTakeFromAny(BlockingCollection<T>[], T, Int32, CancellationToken) TryTakeFromAny(BlockingCollection<T>[], T, Int32, CancellationToken) TryTakeFromAny(BlockingCollection<T>[], T, Int32, CancellationToken) TryTakeFromAny(BlockingCollection<T>[], T, Int32, CancellationToken)

Пытается удалить элемент из любого из указанных экземпляров BlockingCollection<T>.Tries to remove an item from any one of the specified BlockingCollection<T> instances.

TryTakeFromAny(BlockingCollection<T>[], T, TimeSpan) TryTakeFromAny(BlockingCollection<T>[], T, TimeSpan) TryTakeFromAny(BlockingCollection<T>[], T, TimeSpan) TryTakeFromAny(BlockingCollection<T>[], T, TimeSpan)

Пытается удалить элемент из любого из указанных экземпляров BlockingCollection<T>.Tries to remove an item from any one of the specified BlockingCollection<T> instances.

Явные реализации интерфейса

ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32)

Копирует все элементы из экземпляра BlockingCollection<T> в совместимый одномерный массив начиная с указанного индекса в целевом массиве.Copies all of the items in the BlockingCollection<T> instance to a compatible one-dimensional array, starting at the specified index of the target array.

ICollection.IsSynchronized ICollection.IsSynchronized ICollection.IsSynchronized ICollection.IsSynchronized

Возвращает значение, показывающее, является ли доступ к коллекции ICollection синхронизированным (потокобезопасным).Gets a value indicating whether access to the ICollection is synchronized (thread safe).

ICollection.SyncRoot ICollection.SyncRoot ICollection.SyncRoot ICollection.SyncRoot

Получает объект, с помощью которого можно синхронизировать доступ к коллекции ICollection.Gets an object that can be used to synchronize access to the ICollection. Данное свойство не поддерживается.This property is not supported.

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

Предоставляет интерфейс IEnumerator для элементов коллекции.Provides an IEnumerator for items in the collection.

IEnumerable<T>.GetEnumerator() IEnumerable<T>.GetEnumerator() IEnumerable<T>.GetEnumerator() IEnumerable<T>.GetEnumerator()

Предоставляет интерфейс IEnumerator<T> для элементов коллекции.Provides an IEnumerator<T> for items in the collection.

Методы расширения

CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>) CopyToDataTable<T>(IEnumerable<T>)

Возвращает объект DataTable, содержащий копии объектов DataRow при заданном входном объекте IEnumerable<T> и универсальном параметре T, равном DataRow.Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

Копирует объекты DataRow в указанный объект DataTable с заданным входным объектом IEnumerable<T>, где универсальный параметр T имеет значение DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler) CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

Копирует объекты DataRow в указанный объект DataTable с заданным входным объектом IEnumerable<T>, где универсальный параметр T имеет значение DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

Преобразует IEnumerable для IQueryable.Converts an IEnumerable to an IQueryable.

Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>) Ancestors<T>(IEnumerable<T>)

Возвращает коллекцию элементов, содержащую предков каждого узла в исходной коллекции.Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName) Ancestors<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащую предков каждого узла в исходной коллекции.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>) DescendantNodes<T>(IEnumerable<T>)

Возвращает коллекцию подчиненных узлов каждого документа и элемента в исходной коллекции.Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>) Descendants<T>(IEnumerable<T>)

Возвращает коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName) Descendants<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию элементов, содержащую подчиненные элементы каждого элемента и документа в исходной коллекции.Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>) Elements<T>(IEnumerable<T>)

Возвращает коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName) Elements<T>(IEnumerable<T>, XName)

Возвращает отфильтрованную коллекцию дочерних элементов каждого элемента и документа в исходной коллекции.Returns a filtered collection of the child elements of every element and document in the source collection. В коллекцию включаются только элементы, соответствующие XName.Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>) InDocumentOrder<T>(IEnumerable<T>)

Возвращает коллекцию узлов, содержащую все узлы в исходной коллекции, отсортированные в порядке следования документов.Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>) Nodes<T>(IEnumerable<T>)

Возвращает коллекцию дочерних узлов каждого документа и элемента в исходной коллекции.Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>) Remove<T>(IEnumerable<T>)

Удаление каждого узла в исходной коллекции из родительского узла.Removes every node in the source collection from its parent node.

Применяется к

Потокобезопасность

Метод Dispose не является потокобезопасным.The Dispose method is not thread-safe. Все другие открытые и защищенные члены BlockingCollection<T> являются потокобезопасными и могут быть использованы одновременно из нескольких потоков.All other public and protected members of BlockingCollection<T> are thread-safe and may be used concurrently from multiple threads.

Дополнительно