Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Collezioni "concurrent" in .NET 4.0: ConcurrentBag(Of T)

Il .NET Framework 4.0 introduce una serie di nuove collezioni thread-safe, definite Concurrent Collections, che trovano il loro naturale utilizzo nel parallel computing (anche se si possono utilizzare anche in scenari multi-threading classici). Tali collezioni sono definite nel namespace System.Collections.Concurrent e sono tutte generiche.

La prima che affrontiamo oggi, e che rappresenta anche l'ultimo post del 2009 in cui c'è qualche riga di codice, si chiama ConcurrentBag(Of T) e rappresenta un insieme di elementi senza ordine. Questo vuol dire che serve come deposito di elementi, ma non dobbiamo aspettarci alcun criterio di ordinamento.

La collezione espone un metodo Add per l'aggiunta di elementi, una proprietà Count che restituisce il numero di elementi e un metodo TryTake che serve per rimuovere un elemento dalla collezione (esiste anche un metodo TryPeek che ottiene un elemento senza rimuoverlo ma che non tratterò qui). Il seguente codice mostra come lavorare con una ConcurrentBag di interi:

        'Istanzia la collezione e aggiunge elementi

        Dim intBag As New ConcurrentBag(Of Integer)

        intBag.Add(2)

        intBag.Add(1)

        intBag.Add(3)

 

        'Mostra tutti gli elementi tramite iterazione

        For Each number In intBag

            Console.WriteLine(number)

        Next

 

        'Mostra il totale degli elementi

        Console.WriteLine("Numero elementi: {0}", intBag.Count)

 

        'Rimuove un elemento

        Dim numeroDaRimuovere As Integer

        intBag.TryTake(numeroDaRimuovere)

Si noti che TryTake riceve un argomento per riferimento, pertanto l'elemento restituito sarà assegnato alla variabile specificata come argomento. Una collezione di questo tipo può essere acceduta da più thread simultaneamente, con la sicurezza che .NET consentirà l'accesso da parte dei thread in modalità sicura e sincronizzata. Nei prossimi post vedremo anche le altre collezioni concurrent di .NET 4.0.

Alessandro

Print | posted on giovedì 31 dicembre 2009 01:20 | Filed Under [ Parallel Programming ]

Powered by:
Powered By Subtext Powered By ASP.NET