Ответ 1
BlockingCollection
и ConcurrentQueue
есть именно по этой причине. Я сомневаюсь, что вы найдете что-нибудь лучше или проще в использовании. Команда параллельных расширений знает свои вещи:)
Просто быстрая проверка версий - вы определенно используете .NET 4, а не только С# 4? (Например, вы могли бы использовать Visual Studio 2010 и, таким образом, С# 4, но все же предназначались для .NET 3.5, и в этом случае вы не могли бы использовать параллельные расширения.)
Вы также можете начать исследование Асинхронный шаблон на основе задач, TPL Dataflow и функции async/await для С# 5... Очевидно, вы еще не можете их использовать, но это не так. 't больно знать, что происходит.