Лучшим решением будет использование Task
объектов со значением по умолчанию TaskFactory
.Этот API (представленный в .NET 4.0) использует пул потоков с очередями для кражи работы и все эти причудливые вещи.
Если .NET 4.0 недоступен, тогда используйте ThreadPool
, который имеетвстроенная рабочая очередь (которая выполняет некоторую балансировку пула, но не в той же области, что и пул потоков 4.0).
Если вы действительно должны сделать это самостоятельно, тогда я рекомендую BlockingCollection<T>
, которая является блокирующей очередью потребителя / производителя, добавленной в .NET 4.0.
Если вы действительно должны сделать это самостоятельно и не можете использовать .NET 4.0,тогда вы можете использовать ManualResetEvent
или AutoResetEvent
вместе с lock
-защищенной очередью работы.