Me di cuenta de que cuando estoy tratando de procesar elementos en una cola concurrente usando múltiples hilos mientras que varios hilos pueden poner elementos en él, la solución ideal sería usar las Extensiones reactivas con las estructuras de datos concurrentes.Cómo usar IObservable/IObserver con ConcurrentQueue o ConcurrentStack
Mi pregunta original se encuentra en:
While using ConcurrentQueue, trying to dequeue while looping through in parallel
así que estoy ansioso por ver si hay alguna manera de tener una consulta LINQ (o PLINQ) que continuamente se desencolado como artículos se ponen en ella.
Estoy tratando de hacer que esto funcione de una manera en la que pueda tener n cantidad de productores ingresando a la cola y un número limitado de hilos para procesar, por lo que no sobrecargo la base de datos.
Si pudiera usar Rx framework, entonces podría iniciarlo y si se colocan 100 elementos dentro de 100ms, los 20 hilos que forman parte de la consulta PLINQ simplemente procesarían a través de la cola.
Hay tres tecnologías que estoy tratando de trabajar juntos:
- Rx Marco (LINQ reactiva)
- PLING
- System.Collections.Concurrent estructuras
¿Puede explicar cómo esperaba que Rx lo ayudara aquí? –
@Richard Szalay - Como mencioné cerca del final, mi pensamiento es que no tengo que sondear para ver si hay algo en la cola, simplemente podría reaccionar cuando algo se coloque allí, así que si hay una gran cantidad de elementos de repente se introducen, podría tener varios hilos haciendo el procesamiento. Estoy tratando de evitar las encuestas, que es lo que estoy haciendo en este momento. –