Tarkista tarkistuspisteet ja rinnakkaiset käsittelyt

Valmis

Työnkulkujen avulla voit toteuttaa monimutkaista logiikkaa koodissasi. Työnkuluissa käytettävissä olevat kaksi ominaisuutta ovat tarkistuspisteet ja rinnakkaiskäsittely.

Tarkastuspisteissä

Tarkistuspiste on tilannevedos työnkulun nykyisestä tilasta. Tarkistuspisteet sisältävät muuttujien nykyisen arvon ja siihen mennessä luodut tulokset. Lisätietoja siitä, mikä tarkistuspiste on, on tarkistuspisteen verkkosivulla.

Jos työnkulku päättyy virheeseen tai se keskeytetään, se käynnistetään seuraavan kerran tarkistuspisteen kautta työnkulun alun sijaan. Voit määrittää tarkistuspisteen työnkulussa tarkistuspisteen ja työnkulun avulla.

Esimerkki tarkistuspisteestä

Jos esimerkiksi poikkeus tapahtuu Activity2:n jälkeen, työnkulku päättyy seuraavaan mallikoodiin. Kun työnkulku suoritetaan uudelleen, se alkaa toiminnolla 2 heti viimeisen tarkistuspisteen asettamisen jälkeen:

    <Activity1>
        Checkpoint-Workflow
            <Activity2>
                <Exception>
            <Activity3>

Rinnakkaiskäsittely

Komentosarjalohkossa on useita komentoja, jotka suoritetaan samanaikaisesti (tai rinnakkain) järjestyksessä suorittamisen sijaan, kuten tyypillisessä komentosarjassa. Tätä kutsutaan rinnakkaiskäsittelyksi. Lisätietoa rinnakkaiskäsittelystä löytyy Rinnakkaiskäsittely-sivulta .

Yksinkertainen rinnakkaisesimerkki

Seuraavassa esimerkissä kaksi näennäiskonetta (vm0 ja vm1) käynnistetään samanaikaisesti ja vm2 käynnistyy vasta, kun vm0 ja vm1 ovat käynnistyneet:

    Parallel
    {
        Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
        Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
    }

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg

Edistyksellinen rinnakkaiskäsittely

Muut rinnakkaiskäsittelyrakenteet tuovat lisävaihtoehtoja:

Kukin -Parallel

Voit käyttää ForEach -Parallel-rakennetta , jos haluat käsitellä komentoja samanaikaisesti kokoelman kullekin kohteelle. Kokoelman kohteet käsitellään rinnakkain, kun taas komentosarjalohkon komennot suoritetaan peräkkäin.

Seuraavassa esimerkissä Activity1 alkaa samaan aikaan kaikille kokoelman kohteille. Aktiviteetti 2 alkaa kunkin kohteen osalta sen jälkeen, kun Toiminto1 on valmis. Toiminto3 alkaa vasta, kun sekä Activity1 että Activity2 on suoritettu kaikille nimikkeille.

ThrottleLimit-parametri

ThrottleLimit-parametri rajoittaa rinnakkaisuutta. Jos liikaa ThrottleLimit-pilveä on liikaa, se voi aiheuttaa ongelmia. ThrottleLimit-parametrin ihanteellinen arvo riippuu useista ympäristötekijöistä. Kokeile aloittaa alhaisella ThrottleLimit-arvolla ja suurenna sen jälkeen arvoa, kunnes löydät arvon, joka sopii juuri sinulle määritettyihin olosuhteisiin:

ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

Esimerkki reaalimaailman rinnakkaiskäsittelystä

Käytännön esimerkki rinnakkaiskäsittelystä voisi olla seuraavanlainen koodi: Jokaiselle tiedostolle tulee viesti sen kopioimisen jälkeen. Vasta kun kaikki tiedostot on kopioitu, näyttöön tulee valmistumisviesti:

    Workflow Copy-Files
    {
        $files = @("C:\LocalPath\File1.txt","C:\LocalPath\File2.txt","C:\LocalPath\File3.txt")

        ForEach -Parallel -ThrottleLimit 10 ($File in $Files)
        {
            Copy-Item -Path $File -Destination \\NetworkPath
            Write-Output "$File copied."
        }

        Write-Output "All files copied."
    }