Я не уверен, почему вы используете блокировку. Вся идея ConcurrentBag
заключается в том, что одновременно .
Если только вы не пытаетесь помешать какой-либо другой цепочке взять вещи или добавить вещи в сумку во время ее опустошения.
Перечитывая ваш вопрос, я почти уверен, что вы вообще не хотите синхронизировать доступ здесь. ConcurrentBag
позволяет нескольким потокам Take
и Add
без необходимости какой-либо явной синхронизации.
Если вы заблокируете сумку, никакие другие потоки не смогут добавлять или удалять объекты во время работы вашего кода. Предполагая, конечно, что вы защищаете любой доступ к сумке с помощью замка. И как только вы это сделаете, вы полностью победили цель создания параллельной структуры данных без блокировки. Ваша структура данных стала неэффективным списком, управляемым блокировкой.
То же самое, если вы используете блокировку чтения-записи. Вам придется синхронизировать каждый доступ.
В этом случае вам не нужно добавлять явную синхронизацию. Угробить замок.