Рассмотрим следующую ситуациюодного производителя реализация множественного потребителя
private BlockingCollection<Consumer> consumers { get; set; }
ThreadPool.QueueUserWorkItem((x) => {
while (consumers.Count == 0)
Thread.Sleep(20);
Consumer consumer;
if (consumers.TryTake(out consumer)) {
var result = consumer.Read(data);
//do stuff with result
if (consumers.TryAdd(consumer)) {
//ok
}
}
});
Есть ли способ избежать этого тайм-аут, когда не потребитель доступен для обработки запроса?
Если вы используете 'тему «Спящий», ты делаешь что-то не так. Почему вы не используете 'WaitHandle' для блокировки потока? – Dai
Вы пробовали 'System.Collections.Concurrent.BlockingCollection' для ex. Он имеет ограниченную емкость. – Eser
Какой тип «потребителей»? Вам нужно изучить [семафор] (https://msdn.microsoft.com/en-us/library/system.threading.semaphore%28v=vs.110%29.aspx), чтобы позволить потребителю принимать X-элементы max, а затем ждать события, когда больше нет предметов –