Estoy creando un servicio de Windows que hace uso de un FileSystemWatcher para controlar una carpeta en particular para adiciones de un tipo de archivo en particular. Debido a la brecha entre el evento Creado y cuando el archivo está realmente listo para ser manipulado, creé un Queue<T>
para contener los nombres de los archivos que necesitan procesarse. En el controlador de eventos Creado, el elemento se agrega a la cola. Luego, usando un temporizador, periódicamente tomo el primer elemento de la cola y lo proceso. Si el proceso falla, el elemento se agrega a la cola para que el servicio pueda intentar procesarlo más tarde.¿Cómo agrego un artículo al principio de la cola?
Esto funciona bien, pero he encontrado que tiene un efecto secundario: el primer intento de procesamiento de nuevos elementos no ocurre hasta que se vuelven a intentar todos los elementos de nuevo intento. Como es posible que la cola contenga muchos elementos, me gustaría forzar los nuevos elementos al principio de la cola para que se procesen primero. Pero desde el Queue<T>
documentation, no hay una forma obvia de agregar un elemento al frente de la cola.
Supongo que podría crear una segunda cola para nuevos elementos y procesarla de forma preferencial, pero tener una sola cola parece más simple.
¿Hay alguna manera fácil de agregar un elemento al principio de la cola?
Si está añadiendo al frente y cola de una cola, deja de ser una cola, hablando pedante. – CanSpice
¿por qué no agregar los elementos de reintentos a su propia colección para procesarlos más tarde? –
En el STL usaría un deque (que he oído pronunciado como "mazo" pero realmente no lo sé). Es una cola doble. http://www.cplusplus.com/reference/stl/deque/ No parece que haya uno en System.Collections.Generic, pero puede escribirlo de la forma que describe. –