Как правильно использовать ConcurrentBag?

Мы уже читали предыдущие вопросы здесь оConcurrentBag но не нашел фактического примера реализации в многопоточности.

ConcurrentBag - это потокобезопасная реализация пакета, оптимизированная для сценариев, в которых один и тот же поток будет производить и потреблять данные, хранящиеся в пакете ".

В настоящее время это текущее использование в моем коде (это упрощенные, а не фактические коды):

private void MyMethod()
{
    List products = GetAllProducts(); // Get list of products
    ConcurrentBag myBag = new ConcurrentBag();

    //products were simply added here in the ConcurrentBag to simplify the code
    //actual code process each product before adding in the bag
    Parallel.ForEach(
                products,
                new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount },
                product => myBag.Add(product));

    ProcessBag(myBag); // method to process each items in the concurrentbag
}

Мои вопросы:

Это правильное использованиеConcurrentBag? Это нормально использоватьConcurrentBag в такого рода сценарии?

Для меня я думаю, что простойList и ручной замок сделает лучше. Причина этого заключается в том, что сценарий выше уже ломает "одна и та же нить будет производить и потреблять данные, хранящиеся в сумке " править.

Также я также узнал, чтоThreadLocal хранилище, созданное в каждом потоке в параллельном режиме, все еще будет существовать после операции (даже если поток используется повторно, верно?), что может вызвать нежелательную утечку памяти.

Я прав в этом, ребята? Или простой чистый или пустой метод для удаления элементов вConcurrentBag достаточно?

Ответы на вопрос(3)

Ваш ответ на вопрос