Я пишу программу, в которой один поток должен помещать элементы в очередь, а один или несколько потоков извлекают элементы из очереди и обрабатывают их. Чтобы избежать нехватки памяти, я бы хотел, чтобы поток производителя спал, когда очередь заполнялась. Некоторые элементы имеют более высокий приоритет, чем другие, поэтому я бы хотел, чтобы они обрабатывались первыми. Если элементы имеют одинаковый приоритет, я бы хотел, чтобы тот, который был добавлен первым, был обработан первым.
Я хочу отобразить первые 100 элементов или около того в WPF DataGrid, поэтому к нему также должен обращаться поток пользовательского интерфейса. Было бы неплохо, если бы он мог уведомить поток пользовательского интерфейса о том, что также произошло обновление, то есть реализует IObservable.
Есть ли контейнерный класс, который будет делать все это?
Что касается бонусных баллов, я уверен, что не нужно блокировать всю очередь как при постановке, так и при снятии очереди.
.NET 4 реализации в порядке.