Tarkista tarkistuspisteet ja rinnakkaiset käsittelyt
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."
}