Granska kontrollpunkt och parallell bearbetning
Med arbetsflöden kan du implementera komplex logik i koden. Två funktioner som är tillgängliga med arbetsflöden är kontrollpunkter och parallell bearbetning.
Kontrollpunkter
En kontrollpunkt är en ögonblicksbild av arbetsflödets aktuella tillstånd.
Kontrollpunkter inkluderar det aktuella värdet för variabler och eventuella utdata som genererats fram till den punkten. (Mer information om vad en kontrollpunkt är finns i kontrollpunkt webbsida.)
Om ett arbetsflöde slutar med ett fel eller pausas startar det nästa gång det körs från den sista kontrollpunkten i stället för i början av arbetsflödet.
Du kan ange en kontrollpunkt i ett arbetsflöde med aktiviteten Checkpoint-Workflow.
Om ett undantag till exempel inträffar efter Activity2 slutar arbetsflödet i följande exempelkod.
När arbetsflödet körs igen börjar det med Activity2, följt strax efter den senaste kontrollpunktsuppsättningen.
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
Parallell bearbetning
Ett skriptblock har flera kommandon som körs samtidigt (eller parallellt) i stället för sekventiellt, som för ett typiskt skript.
Det kallas parallellbearbetning. (Mer information om parallell bearbetning finns på webbsidan Parallell bearbetning.)
I följande exempel startas två vm0- och vm1 virtuella datorer samtidigt, och vm2 startar först efter vm0 och vm1 har startat.
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
Ett annat exempel på parallell bearbetning är följande konstruktioner som introducerar några extra alternativ:
- ForEach -Parallel. Du kan använda konstruktionen ForEach -Parallel för att samtidigt bearbeta kommandon för varje objekt i en samling. Objekten i samlingen bearbetas parallellt medan kommandona i skriptblocket körs sekventiellt.
I följande exempel startar Activity1 samtidigt för alla objekt i samlingen.
För varje objekt startar Activity2 när Activity1 har slutförts. Activity3 startar först efter att både Activity1 och Activity2 har slutförts för alla objekt.
- ThrottleLimit – Vi använder parametern ThrottleLimit för att begränsa parallellitet. För hög ThrottleLimit kan orsaka problem. Det idealiska värdet för parametern ThrottleLimit beror på flera miljöfaktorer. Prova att börja med ett lågt ThrottleLimit- värde och öka sedan värdet tills du hittar ett som fungerar för dina specifika omständigheter:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
Ett verkligt exempel på det kan likna följande kod: ett meddelande visas för varje fil när den har kopierats. Först när alla filer har kopierats visas slutförandemeddelandet.
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."
}