Nello sviluppo di qualsiasi soluzione, l'uso di array o collezioni è all'ordine del giorno, così come l'adozione di code per mantenere in memoria un elenco di richieste o di elementi con un approccio FIFO (First Input, First Output).
Nel .NET Framework la classe Queue soddisfa questa richiesta, ma in situazioni concorrenziali questa non è adatta a gestire richiese contemporanee di accodamento e scodamento. Sebbene è possibile sfruttare il lock/syncLock per l'accesso alla collezione, questa tecnica fornisce scarse prestazioni e va quindi evitata. Con il .NET Framework 4.0 è stata introdotta la classe generica ConcurrentQueue che, come il nome suggerisce, è thread-safe ed è adatta a scenari di concorrenza.
Il suo utilizzo è piuttosto semplice, ma allo stesso tempo molto performante; l'unica differenza che occorre tenere in considerazione è che lo scodamento non è detto che vada sempre a buon fine. E' per questo motivo che, invece del metodo Dequeue, si dispone della funzione TryDequeue.
ConcurrentQueue<string> users = new ConcurrentQueue<string>(); users.Enqueue("Ricciolo"); users.Enqueue(".db"); string nextUser; if (users.TryDequeue(out nextUser)) { // Faccio qualcosa con l'utente }
Poiché in situazione di concorrenza più thread possono scodare dalla coda, potrebbe non essere più disponibile un elemento, anche previa consultazione della proprietà Count. Per questo motivo è sempre opportuno affidarsi al boolean restituito da TryDequeue e TryPeek.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Scrivere selettori CSS più semplici ed efficienti con :is()
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Aggiornare a .NET 9 su Azure App Service
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Eseguire script pre e post esecuzione di un workflow di GitHub
Il nuovo controllo Range di Blazor 9
Proteggere le risorse Azure con private link e private endpoints
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Creare una custom property in GitHub
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Combinare Container Queries e Media Queries