檢查檢查點和平行處理

已完成

工作流程可讓您在程式碼內實作複雜的邏輯。 工作流程可用的兩個功能是檢查點和平行處理。

檢查點

檢查點是工作流程目前狀態的快照集。

檢查點包含變數的目前值,以及直到該檢查點所產生的任何輸出。 (如需檢查點是什麼的詳細資訊,請閱讀檢查點網頁)。

如果工作流程因錯誤而結束,或是工作流程暫止,則工作流程下次執行時,會從其最後一個檢查點開始,而不會從工作流程的起始點開始。

您可以透過 Checkpoint-Workflow 活動在工作流程中設定檢查點。

例如,如果在 Activity2 之後發生例外狀況,工作流程將會在下列範例程式碼中結束。

工作流程重新執行時,會從 Activity2 開始,緊接在所設定的上一個檢查點之後。

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

平行處理

指令碼區塊會有多個同時 (或平行) 執行的命令 (而非循序執行),情況就和典型的指令碼一樣。

這稱為平行處理。 (如需平行處理的詳細資訊,請參閱平行處理網頁)。

在下列範例中,vm0vm1 這兩個 VM 會同時啟動,而 vm2 要在 vm0vm1 啟動後才會啟動。

    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 完成之後開始。 只有在所有項目的 Activity1Activity2 都已完成之後,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."
    }