檢查檢查點和平行處理
工作流程可讓您在程式碼內實作複雜的邏輯。 工作流程可用的兩個功能是檢查點和平行處理。
檢查點
檢查點是工作流程目前狀態的快照集。
檢查點包含變數的目前值,以及直到該檢查點所產生的任何輸出。 (如需檢查點是什麼的詳細資訊,請閱讀檢查點網頁)。
如果工作流程因錯誤而結束,或是工作流程暫止,則工作流程下次執行時,會從其最後一個檢查點開始,而不會從工作流程的起始點開始。
您可以透過 Checkpoint-Workflow 活動在工作流程中設定檢查點。
例如,如果在 Activity2 之後發生例外狀況,工作流程將會在下列範例程式碼中結束。
工作流程重新執行時,會從 Activity2 開始,緊接在所設定的上一個檢查點之後。
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
平行處理
指令碼區塊會有多個同時 (或平行) 執行的命令 (而非循序執行),情況就和典型的指令碼一樣。
這稱為平行處理。 (如需平行處理的詳細資訊,請參閱平行處理網頁)。
在下列範例中,vm0 和 vm1 這兩個 VM 會同時啟動,而 vm2 要在 vm0 和 vm1 啟動後才會啟動。
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
另一個平行處理範例是另外引進了一些選項的下列建構:
- ForEach -Parallel。 您可以使用 ForEach -Parallel 建構來同時處理集合中每個項目的命令。 集合中的項目會以平行方式執行,而指令碼區塊中的命令則會以循序方式執行。
在下列範例中,集合內所有項目的 Activity1 會同時開始。
針對每個項目,Activity2 會在 Activity1 完成之後開始。 只有在所有項目的 Activity1 和 Activity2 都已完成之後,Activity3 才會開始。
- ThrottleLimit - 我們會使用 ThrottleLimit 參數來限制平行處理原則。 ThrottleLimit 太高可能會導致問題。 ThrottleLimit 參數的理想值取決於數個環境因素。 請嘗試從較低的 ThrottleLimit 值來開始,然後逐漸增加此值,直到您找到適合您特定情況的值:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
其在真實世界的範例可能類似下列程式碼:每個檔案在複製完成後會顯示一則訊息。 只有在所有檔案複製完成之後,才會顯示完成訊息。
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."
}