Добавьте ещё в список volatile, без него при многопоточности может быть забавная побочка (хотя в .NET старались её избежать ценой некоторой потери производительности).
С удовольствием!
Суть такова: есть файл, в котором лежат независимые блоки информации. Читатель последовательно считывает их и закидывает в очереди, откуда с другой стороны их забирают несколько потоков-обработчиков (у каждого своя очередь), чтобы что-то с ними сделать. Число обработчиков известно на момент вызова, динамически менять его не нужно. Собственно, нужно дождаться, пока все обработчики просигнализируют о завершении своей работы, и CountdownEvent здесь как нельзя кстати)
.NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 2