Langankeräyskokoelmat otettiin ensimmäisen kerran käyttöön .Net 4: ssä ottamalla käyttöön System.Collections.Concurrent nimitila. System.Collections.Concurrent-nimitilassa olevat kokoelmatyypit sisältävät kokoelman langattomien kokoelmien luokkia.
Samanaikainen pino
Pino on tietorakenne, joka toimii LIFO-periaatteella (viimeinen ensin ulos). ConcurrentStack-luokka on langankestävä vastine geneeriselle Stack-luokalle. ConcurrentStack on säiettä käyttävä yleinen keräysluokka, joka otettiin ensimmäisen kerran käyttöön .Net Framework 4: ssä. Tässä on luettelo tämän luokan tärkeistä menetelmistä, jotka kuvaavat mahdollisia toimintoja.
- Push (T-elementti) - tätä menetelmää käytetään lisäämään tyypin T tietoja.
- PushRange - tällä menetelmällä voidaan lisätä joukko tyypin T kohteita.
- TryPop (out T) - tätä menetelmää käytetään ensimmäisen elementin hakemiseen pinosta. Se palaa totta menestyksessä, väärin muuten.
- TryPeek (out T) - tätä menetelmää käytetään seuraavan elementin hakemiseen pinosta, mutta se ei poista elementtiä pinosta. Huomaa, että samanlainen kuin TryPop (out T) -menetelmä, se palauttaa arvon tosi onnistumisen yhteydessä ja väärin muuten.
- TryPopRange - tämä menetelmä on ylikuormitettu ja toimii samalla tavalla kuin TryPop, mutta sitä käytetään matriisien palauttamiseen pinosta
Näin voit luoda ConcurrentStack-luokan ilmentymän ja siirtää siihen tietoja.
ConcurrentStack concurrentStack = uusi ConcurrentStack ();
for (Int32-indeksi = 0; indeksi <10; indeksi ++)
{
samanaikainenStack.Push (hakemisto);
}
Jos haluat noutaa elementit samanaikaisesta pinosta, voit hyödyntää TryPop (out T) -menetelmää alla olevan kuvan mukaisesti.
Int32-tiedot;
bool-menestys = concurrentStack.TryPop (tiedot pois);
Seuraava koodiluettelo kuvaa, kuinka voit tallentaa ja hakea tietoja samanaikaiseen pinoon ja siitä.
staattinen void Main (merkkijono [] args)
{
ConcurrentStack concurrentStack = uusi ConcurrentStack ();
for (Int32-indeksi = 0; indeksi <100; indeksi ++)
{
samanaikainenStack.Push (hakemisto);
}
while (concurrentStack.Count> 0)
{
Int32-tiedot;
bool-menestys = concurrentStack.TryPop (tiedot pois);
jos (menestys)
{
Console.WriteLine (data);
}
}
Konsoli.Lue ();
}
Kun suoritat yllä olevan koodiluettelon, numerot 0-99 näytetään päinvastaisessa järjestyksessä konsoli-ikkunassa.
Samanaikainen jono
Jono on tietorakenne, joka toimii FIFO: n perusteella (first in first out). .Net: n ConcurrentQueue-luokka toimii langattomana FIFO-pohjaisena yleisenä jonona.
Seuraava on luettelo tärkeistä menetelmistä ConcurrentQueue-luokassa.
- Enqueue (T-elementti) - tätä menetelmää käytetään lisäämään T-tyypin kohde jonoon
- TryPeek (out T) - tätä menetelmää käytetään seuraavan elementin hakemiseen jonosta, mutta se ei poista elementtiä jonosta. Tämä menetelmä palaa tosi menestyksessä ja epätosi, kun se epäonnistuu.
- TryDequeue (out T) - tätä menetelmää käytetään ensimmäisen elementin hakemiseen jonosta. Toisin kuin TryPeek (out T) -menetelmä, se poistaa elementin jonosta. Tämä menetelmä palaa tosi menestyksessä ja väärin muuten.
Seuraava koodinpätkä osoittaa, kuinka voit luoda ConcurrentQueue-luokan ilmentymän kokonaislukujen tallentamiseksi.
ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();
Jos haluat tallentaa elementtejä samanaikaiseen jonoilmentymään, voit hyödyntää Enqueue-menetelmää alla olevan kuvan mukaisesti.
concurrentQueue.Enqueue (100);
Seuraava koodiluettelo kuvaa, kuinka voit tallentaa ja noutaa elementtejä samanaikaiseen jonoon ja siitä.
ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();
for (int-indeksi = 0; indeksi <100; indeksi ++)
{
concurrentQueue.Enqueue (hakemisto);
}
Int32-tuote;
while (concurrentQueue.TryDequeue (out-kohde))
{
Console.WriteLine (kohde);
}
Kun suoritat yllä olevan koodiluettelon, numerot 0-99 näkyvät konsoli-ikkunassa.
Huomaa, että sekä ConcurrentStack- että ConcurrentQueue-luokat ovat langattomia ja voivat hallita lukitus- ja synkronointiongelmia sisäisesti.
Voit myös muuntaa samanaikaisen jonoilmentymän taulukoksi soittamalla ToArray () -menetelmään. Seuraava koodinpätkä kuvaa, miten tämä voidaan saavuttaa.
ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();
for (Int32-indeksi = 0; indeksi <100; indeksi ++)
concurrentQueue.Enqueue (hakemisto);
Int32 [] integerArray = concurrentQueue.ToArray ();
foreach (int i in kokonaisluku Array)
{
Console.WriteLine (i);
}
ConcurrentQueue-luokan IsEmpty-ominaisuus palauttaa arvon true, koska kokoelma on tyhjä, muuten epätosi. Seuraava koodinpätkä osoittaa, kuinka voit käyttää tätä menetelmää.
ConcurrentQueue concurrentQueue = uusi ConcurrentQueue ();
for (Int32-indeksi = 0; indeksi <100; indeksi ++)
concurrentQueue.Enqueue (hakemisto);
while (! concurrentQueue.IsEmpty)
{
Int32 tulos;
concurrentQueue.TryDequeue (tulos loppu);
Console.WriteLine (tulos);
}