Я работаю над проектом со следующим рабочим процессом:Дождитесь блокировки коллекции (очереди) для уменьшения размера в C#
Часть первая:
- Событие прибывает асинхронно и очередями в блокировании очередь, мы будем называть это Q1
- Thread подхватывает следующий доступный элемент из этой очереди
- Пункт заканчивается работает {N} ряд задач параллельно
- Каждое задание ставит в очередь его результат во второй очереди, мы будем называть это Q2.
- При обработке финишных элементов следующий элемент считывается из очереди.
Часть вторая:
- Другой поток считывает из Q2 один объект в то время, и работает на результат
Итак, проблема здесь есть, каждый элемент в первой очереди заканчивается выполнение большого количества задач параллельно, и каждая задача ставит в очередь свой результат. Вторая очередь должна обрабатываться поочередно, по одному пункту за раз, и она наводняется.
Мой вопрос
мне нужен механизм, который сделает обработку резьбы Q1 ждать, пока количество элементов в Q2 не ниже определенного порогу. Каков наилучший способ достичь этого? Есть ли способ иметь решение, основанное на событиях, а не решение опроса?
Cool; Я уже использую блокирующие коллекции здесь, так что это незначительные изменения :) –
Я попробую и приму, если это сработает. Это могло бы быть хорошим решением, так как это прекратило бы обработку потоков задач (N), пока они не смогли бы поставить очередь на результат, что остановило бы больше событий от обработки в первую очередь :) –