Untersuchen von Prüfpunkten und Parallelverarbeitung
Mit Workflows können Sie in Ihrem Code komplexe Logik implementieren. In Workflows stehen zwei Features zur Verfügung: Prüfpunkte und Parallelverarbeitung.
Prüfpunkte
Ein Prüfpunkt ist eine Momentaufnahme des aktuellen Zustands des Workflows.
Prüfpunkte enthalten den aktuellen Wert für Variablen und alle bis zu diesem Zeitpunkt generierten Ausgaben. (Weitere Informationen zu Prüfpunkten finden Sie auf der Webseite Prüfpunkt.)
Wenn ein Workflow mit einem Fehler endet oder angehalten wird, beginnt er bei der nächsten Ausführung an seinem letzten Prüfpunkt und nicht am Anfang des Workflows.
Sie können mithilfe der Aktivität Checkpoint-Workflow einen Prüfpunkt in einem Workflow setzen.
Wenn beispielsweise nach Activity2 eine Ausnahme auftritt, wird der Workflow im folgenden Beispielcode beendet.
Wenn der Workflow erneut ausgeführt wird, beginnt er mit Activity2, unmittelbar nach dem zuletzt festgelegten Prüfpunkt.
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
Parallelverarbeitung
Ein Skriptblock enthält mehrere Befehle, die gleichzeitig (oder parallel) und nicht nacheinander (sequenziell), wie bei einem typischen Skript, ausgeführt werden.
Dies wird als Parallelverarbeitung bezeichnet. (Weitere Informationen zur Parallelverarbeitung finden Sie auf der Webseite zur Parallelverarbeitung.)
Im folgenden Beispiel werden die beiden VMs vm0 und vm1 gleichzeitig gestartet. vm2 wird erst gestartet, nachdem vm0 und vm1 gestartet wurden.
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
Ein weiteres Beispiel für Parallelverarbeitung sind die folgenden Konstrukte, mit denen einige zusätzliche Optionen eingeführt werden:
- ForEach -Parallel. Sie können mithilfe des Konstrukts ForEach -Parallel die Befehle für jedes Element in einer Sammlung gleichzeitig verarbeiten. Die Elemente in der Auflistung werden parallel ausgeführt, während die Befehle im Skriptblock sequenziell ausgeführt werden.
Im folgenden Beispiel beginnt Activity1 für alle Elemente in der Sammlung zur gleichen Zeit.
Für jedes Element beginnt Activity2 nach Abschluss von Activity1. Activity3 beginnt erst, wenn sowohl Activity1 als auch Activity2 für alle Elemente abgeschlossen sind.
- ThrottleLimit – Mit dem Parameter ThrottleLimit wird Parallelität begrenzt. Ein zu hoher Wert für ThrottleLimit kann Probleme verursachen. Der ideale Wert für den Parameter ThrottleLimit hängt von verschiedenen Umgebungsfaktoren ab. Beginnen Sie zunächst mit einem niedrigen Wert für ThrottleLimit, den Sie dann erhöhen, bis Sie einen Wert gefunden haben, der für Ihre konkreten Umstände geeignet ist:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
Ein Beispiel aus der Praxis könnte so aussehen wie der folgende Code. Für jede Datei wird nach dem Kopieren eine Meldung angezeigt. Erst nachdem alle Dateien kopiert wurden, wird die Meldung zum Abschluss des Vorgangs angezeigt.
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."
}