Controlepunt en parallelle verwerking onderzoeken

Voltooid

Met werkstromen kunt u complexe logica in uw code implementeren. Twee functies die beschikbaar zijn met werkstromen zijn controlepunten en parallelle verwerking.

Controlepunten

Een controlepunt is een momentopname van de huidige status van de werkstroom.

Controlepunten bevatten de huidige waarde voor variabelen en uitvoer die tot dat punt is gegenereerd. (Lees de webpagina van het controlepunt voor meer informatie over wat een controlepunt is.)

Als een werkstroom eindigt op een fout of wordt onderbroken, wordt de volgende keer dat deze wordt uitgevoerd, gestart vanaf het laatste controlepunt in plaats van aan het begin van de werkstroom.

U kunt een controlepunt instellen in een werkstroom met de activiteit Controlepunt-werkstroom .

Als er bijvoorbeeld een uitzondering optreedt na Activiteit2, eindigt de werkstroom in de volgende voorbeeldcode.

Wanneer de werkstroom opnieuw wordt uitgevoerd, begint deze met Activity2, gevolgd net na de laatste controlepuntset.

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

Parallelle verwerking

Een scriptblok heeft meerdere opdrachten die gelijktijdig (of parallel) worden uitgevoerd in plaats van sequentieel, zoals voor een typisch script.

Dit wordt parallelle verwerking genoemd. (Meer informatie over parallelle verwerking is beschikbaar op de Webpagina voor parallelle verwerking .)

In het volgende voorbeeld worden twee VM0 - en VM1-VM's gelijktijdig gestart en wordt vm2 pas gestart nadat vm0 en vm1 zijn gestart.

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

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg 

Een ander voorbeeld van parallelle verwerking zou de volgende constructies zijn die enkele extra opties introduceren:

  • ForEach -Parallel. U kunt de ForEach -Parallel-constructie gebruiken om opdrachten voor elk item in een verzameling gelijktijdig te verwerken. De items in de verzameling worden parallel verwerkt terwijl de opdrachten in het scriptblok opeenvolgend worden uitgevoerd.

In het volgende voorbeeld begint Activity1 op hetzelfde moment voor alle items in de verzameling.

Voor elk item begint Activity2 nadat Activity1 is voltooid. Activiteit3 wordt pas gestart nadat zowel Activity1 als Activity2 zijn voltooid voor alle items.

  • ThrottleLimit : we gebruiken de parameter ThrottleLimit om parallelle uitvoering te beperken. Te hoog van een ThrottleLimit kan problemen veroorzaken. De ideale waarde voor de parameter ThrottleLimit is afhankelijk van verschillende omgevingsfactoren. Begin met een lage ThrottleLimit-waarde en verhoog de waarde totdat u een waarde vindt die geschikt is voor uw specifieke omstandigheden:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

Een praktijkvoorbeeld hiervan kan vergelijkbaar zijn met de volgende code: een bericht wordt weergegeven voor elk bestand nadat het is gekopieerd. Alleen nadat alle bestanden zijn gekopieerd, wordt het voltooiingsbericht weergegeven.

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