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
Recuperare App Service cancellati su Azure
Eliminare record doppi in Sql Server
Aggiornare a .NET 9 su Azure App Service
Gestire i dati con Azure Cosmos DB Data Explorer
Testare il failover sulle region in Azure Storage
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Ottimizzare le performance usando Span<T> e il metodo Split
Creare una libreria CSS universale - Rotazione degli elementi
Managed deployment strategy in Azure DevOps
Path addizionali per gli asset in ASP.NET Core MVC
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
I più letti di oggi
- Microsoft Security Bulletin MS02-061
- Da non perdere! I corsi online di ASPItalia.com
- DevOps in a .NET world
- Costruire un client HTTP tipizzato con Refit e IHttpClientFactory in ASP.NET Core 2.1
- Scambiare dati tra due server con SOAP: il client
- Il global.asa questo sconosciuto
- Ordinare le directory con FSO e disconnected recordset di ADO
- Sfruttare un assembly da più applicazioni ASP.NET senza utilizzare la GAC
- Usare Smart Navigation con ASP.NET
- Creare documenti Word con salto di pagina e proprietà avanzate