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
Controllare la telemetria con .NET Aspire
Recuperare gli audit log in Azure DevOps
Gestire il ciclo di vita di AbortController in Javascript
Supporto nativo a JSON in SQL Server 2025
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Validazione personalizzata nelle Minimal API di ASP.NET Core
Monitorare le tabelle di Azure SQL Database con Change Event Streaming
Gestione delle scrollbar dinamiche in HTML e CSS
Ospitare n8n su Azure App Service
Evidenziare una porzione di testo in un pagina dopo una navigazione
Integrare LLM alle nostre applicazioni in .NET con MCP
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi


