Zbadaj punkty kontrolne i przetwarzanie równoległe
Przepływy pracy umożliwiają implementowanie złożonej logiki w kodzie. Dwie funkcje dostępne w przepływach pracy to punkty kontrolne i przetwarzanie równoległe.
Punktów kontrolnych
punkt kontrolny to migawka bieżącego stanu przepływu pracy. Punkty kontrolne zawierają bieżącą wartość zmiennych i wszystkie dane wyjściowe wygenerowane do tego punktu. Aby uzyskać więcej informacji na temat punktu kontrolnego, przeczytaj stronę internetową punktu kontrolnego .
Jeśli przepływ pracy kończy się błędem lub jest zawieszony, przy następnym uruchomieniu rozpocznie się od ostatniego punktu kontrolnego zamiast na początku przepływu pracy. Punkt kontrolny w przepływie pracy można ustawić przy użyciu działania Checkpoint-Workflow.
Przykład punktu kontrolnego
Jeśli na przykład wyjątek wystąpi po działaniu Activity2, przepływ pracy zakończy się w poniższym przykładowym kodzie. Po ponownym uruchomieniu przepływu pracy rozpoczyna się od działania Activity2 bezpośrednio po ostatnim zestawie punktów kontrolnych:
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
Przetwarzanie równoległe
Blok skryptu ma wiele poleceń, które są uruchamiane współbieżnie (lub równolegle) zamiast sekwencyjnie, tak jak w przypadku typowego skryptu. Jest to nazywane przetwarzaniem równoległym. Więcej informacji na temat przetwarzania równoległego jest dostępnych na stronie internetowej Przetwarzanie równoległe .
Podstawowy przykład równoległy
W poniższym przykładzie dwie maszyny wirtualne (vm0 i vm1) zostaną uruchomione współbieżnie, a maszyna vm2 zostanie uruchomiona dopiero po uruchomieniu maszyn wirtualnych vm0 i vm1 :
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
Zaawansowane przetwarzanie równoległe
Dodatkowe konstrukcje przetwarzania równoległego wprowadzają dodatkowe opcje:
ForEach -Parallel
Można użyć konstrukcji ForEach -Parallel, aby współbieżnie przetwarzać polecenia dla każdego elementu w kolekcji. Elementy w kolekcji są przetwarzane równolegle, podczas gdy polecenia w bloku skryptu są uruchamiane sekwencyjnie.
W poniższym przykładzie Activity1 rozpoczyna się jednocześnie dla wszystkich elementów w kolekcji. Dla każdego elementu Activity2 rozpoczyna się po zakończeniu Activity1. Activity3 jest uruchamiana dopiero po zakończeniu wszystkich elementów Activity1 i Activity2.
Parametr limit przepustnicy
Parametr ThrottleLimit ogranicza równoległość. Zbyt wysoka ThrottleLimit może powodować problemy. Idealna wartość parametru ThrottleLimit zależy od kilku czynników środowiskowych. Spróbuj rozpocząć od niskiej wartości ThrottleLimit, a następnie stopniowo zwiększaj wartość, aż znajdziesz taką, która działa w Twoich specyficznych potrzebach.
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
Przykład przetwarzania równoległego w świecie rzeczywistym
Praktyczny przykład przetwarzania równoległego może być podobny do następującego kodu: komunikat jest wyświetlany dla każdego pliku po skopiowaniu. Tylko po skopiowaniu wszystkich plików jest wyświetlany komunikat ukończenia:
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."
}