Sto creando un servizio Windows che utilizza un FileSystemWatcher per monitorare una particolare cartella per aggiunte di un particolare tipo di file. A causa del divario tra l'evento Created e quando il file è effettivamente pronto per essere manipolato, ho creato un Queue<T>
per contenere i nomi di file che devono essere elaborati. Nel gestore eventi Created, l'elemento viene aggiunto alla coda. Quindi, usando un timer, prendo periodicamente il primo oggetto dalla coda e lo elabora. Se l'elaborazione non riesce, l'elemento viene aggiunto nuovamente alla coda, in modo che il servizio possa riprovare a elaborarlo in un secondo momento.Come si aggiunge un articolo in primo piano?
Questo funziona benissimo ma ho riscontrato che ha un effetto collaterale: il primo tentativo di elaborazione di nuovi elementi non avviene finché tutti i vecchi tentativi non sono stati riprovati. Poiché è possibile che la coda contenga molti elementi, vorrei forzare i nuovi elementi in primo piano in modo che vengano elaborati per primi. Ma dal numero Queue<T>
documentation, non esiste un modo ovvio per aggiungere un articolo alla parte anteriore della coda.
Suppongo di poter creare una seconda coda per i nuovi articoli ed elaborarla preferenzialmente ma avere una singola coda sembra più semplice.
Quindi c'è un modo semplice per aggiungere un articolo in prima fila?
Se si aggiunge alla parte anteriore e alla coda di una coda, cessa di essere una coda, pedanticamente parlando. – CanSpice
perché non aggiungere i nuovi tentativi nella propria raccolta per essere elaborati in seguito? –
Nella STL si usa una deque (che ho sentito pronunciare "deck" ma non lo so davvero). È una coda a doppio attacco. http://www.cplusplus.com/reference/stl/deque/ Non sembra che ce ne sia uno in System.Collections.Generic, ma potresti scriverlo nel modo che descrivi. –