Prozkoumání kontrolního bodu a paralelního zpracování

Dokončeno

Pracovní postupy umožňují implementovat v kódu složitou logiku. Dvě funkce dostupné v pracovních postupech jsou kontrolní body a paralelní zpracování.

Kontrolní body

Kontrolní bod je snímek aktuálního stavu pracovního postupu.

Kontrolní body zahrnují aktuální hodnotu proměnných a veškerý výstup vygenerovaný až do tohoto bodu. (Další informace o tom, co je kontrolní bod, najdete na webové stránce kontrolní bod.)

Pokud pracovní postup skončí chybou nebo je pozastavený, při příštím spuštění začne od posledního kontrolního bodu místo na začátku pracovního postupu.

Kontrolní bod v pracovním postupu můžete nastavit pomocí aktivity Kontrolní bod-Pracovní postup.

Pokud například dojde k výjimce po aktivitě Activity2, pracovní postup skončí v následujícím vzorovém kódu.

Když se pracovní postup znovu spustí, začíná u Activity2 a pokračuje těsně po poslední nastavené kontrolní sadě.

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

Paralelní zpracování

Blok skriptu obsahuje více příkazů, které běží souběžně (nebo paralelně) místo postupně, jako u typického skriptu.

Říká se tomu paralelní zpracování. (Další informace o paralelním zpracování jsou k dispozici na webové stránce Paralelní zpracování.)

V následujícím příkladu se souběžně spustí dva virtuální počítače: vm0 a vm1, a vm2 se spustí až po spuštění vm0 a vm1.

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

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg 

Dalším příkladem paralelního zpracování by byly následující konstrukce, které představují některé další možnosti:

  • ForEach -Parallel. Ke souběžnému zpracování příkazů pro každou položku v kolekci můžete použít konstruktor ForEach -Parallel. Položky v kolekci se zpracovávají paralelně, zatímco příkazy v bloku skriptu se spouštějí postupně.

V následujícím příkladu se Aktivita1 spouští ve stejný čas pro všechny položky v kolekci.

Pro každou položku začíná Aktivita2 poté, co se dokončí Aktivita1. Aktivita3 se spustí až poté, co byly dokončeny jak Aktivita1, tak Aktivita2 pro všechny položky.

  • ThrottleLimit – k omezení paralelismu používáme parametr ThrottleLimit. Příliš vysoká ThrottleLimit může způsobit problémy. Ideální hodnota parametru ThrottleLimit závisí na několika faktorech prostředí. Zkuste začít s nízkou hodnotou ThrottleLimit a pak hodnotu zvyšte, dokud nenajdete hodnotu, která bude fungovat pro vaše konkrétní okolnosti:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

Skutečný příklad může být podobný následujícímu kódu: zpráva se zobrazí pro každý soubor po zkopírování. Až po zkopírování všech souborů se zobrazí zpráva o dokončení.

    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."
    }