В данном примере перед выводом параллельная очередь преобразуется в последовательную.
При использовании PLINQ вы можете использовать оператор ForAll для перебора элементов коллекции параллельным способом.
При возникновении исключений в параллельной обработке все они собираются объектом AggregateException.
Добавлен пример использующий BlockingCollection. Одна задача добавляет данные в коллекцию, а вторая - удалает их из коллекции.
В данном примере используется метод GetConsumingEnumerable, он возвращает IEnumerable, который блокируется пока не найдет новый элемент.
Добавлен пример для работы с ConcurrentBag классом. ConcurrentBag - это просто "мешок" элементов. Он может включать дубликаты и элементы не имеют определенного порядка.
ConcurrentBag реализует интерфейс IEnumerable<T>, который перебирает элементы коллекции. Эта операция создает снимок коллекции при начале итерации, таким образом элементы которые добавлены после начала итерации не будут учтены. Эта операция потокобезопасна.
Добавлен пример с классом ConcurrentStack.
Добавлен пример с классом ConcurrentQueue.
Добавлен пример с классом ConcurrentDictionary.