Я понял, что когда я пытаюсь обрабатывать элементы в параллельной очереди, используя несколько потоков, в то время как несколько потоков могут помещать в нее элементы, идеальным решением было бы использование реактивных расширений с параллельными структурами данных.
Мой оригинальный вопрос находится по адресу:
При использовании ConcurrentQueue попытка удаления из очереди во время цикла параллельно
Поэтому мне любопытно, есть ли способ получить запрос LINQ (или PLINQ), который будет постоянно удаляться из очереди по мере помещения в него элементов.
Я пытаюсь заставить это работать таким образом, чтобы у меня было n количество производителей, помещающих в очередь, и ограниченное количество потоков для обработки, поэтому я не перегружаю базу данных.
Если бы я мог использовать фреймворк Rx, я ожидаю, что смогу просто запустить его, и если 100 элементов будут помещены в течение 100 мс, то 20 потоков, являющихся частью запроса PLINQ, будут просто обрабатываться через очередь.
Я пытаюсь работать вместе с тремя технологиями:
- Rx Framework (реактивный LINQ)
- ПЛИНГ
- System.Collections.Concurrent структуры