Ответ 1
Вы действительно можете использовать BlockingCollection
, но нет абсолютно никакого смысла в этом.
Прежде всего, обратите внимание, что BlockingCollection
является оберткой вокруг коллекции, которая реализует IProducerConsumerCollection<T>
. Любой тип, реализующий этот интерфейс, может использоваться в качестве основного хранилища:
Когда вы создаете объект
BlockingCollection<T>
, вы можете указать не только ограниченная емкость, но также и тип используемой коллекции. Для Например, вы можете указать объектConcurrentQueue<T>
для первого входа, (FIFO) или объектConcurrentStack<T>
для последнего in, first out (LIFO). Вы можете использовать любой класс коллекции, который реализует интерфейсIProducerConsumerCollection<T>
. По умолчанию тип коллекции дляBlockingCollection<T>
-ConcurrentQueue<T>
.
Это включает ConcurrentBag<T>
, что означает, что вы можете иметь блокирующий параллельный пакет. Итак, какая разница между простой IProducerConsumerCollection<T>
и блокирующей коллекцией? В документации BlockingCollection
говорится (внимание мое):
BlockingCollection<T>
используется как обертка дляIProducerConsumerCollection<T>
экземпляр , позволяющий удалять попытки от коллекции до блока, пока данные не будут удалены. Аналогично, aBlockingCollection<T>
может быть создан для принудительно верхняя граница количества допустимых элементов данных вIProducerConsumerCollection<T>
[...]
Так как в связанном вопросе нет необходимости делать любую из этих вещей, использование BlockingCollection
просто добавляет слой функциональности, который не используется.