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
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Escludere alcuni file da GitHub Secret Scanning
Gestire gli accessi con Token su Azure Container Registry
Creare una libreria CSS universale: Cards
Testare l'invio dei messaggi con Event Hubs Data Explorer
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Utilizzare i primary constructor di C# per inizializzare le proprietà
Gestione dell'annidamento delle regole dei layer in CSS
Filtering sulle colonne in una QuickGrid di Blazor
Proteggere le risorse Azure con private link e private endpoints
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online