Examinar o ponto de verificação e o processamento paralelo

Concluído

Os fluxos de trabalho permitem que você implemente uma lógica complexa em seu código. Dois recursos disponíveis com fluxos de trabalho são pontos de verificação e processamento paralelo.

Pontos de Verificação

Um ponto de verificação é um instantâneo do estado atual do fluxo de trabalho. Os pontos de verificação incluem o valor atual para variáveis e qualquer saída gerada até esse ponto. Para obter mais informações sobre o que é um ponto de verificação, leia a página da Web do ponto de verificação .

Se um fluxo de trabalho terminar em um erro ou for suspenso, na próxima vez em que for executado, ele começará a partir de seu último ponto de verificação em vez de no início do fluxo de trabalho. Você pode definir um ponto de verificação em um fluxo de trabalho com a atividade Checkpoint-Workflow.

Exemplo de ponto de verificação

Por exemplo, se uma exceção ocorrer após a Atividade2, o fluxo de trabalho terminará no código de exemplo a seguir. Quando o fluxo de trabalho é executado novamente, ele começa com Activity2, imediatamente após o último conjunto de pontos de verificação:

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

Processamento paralelo

Um bloco de script tem vários comandos que são executados simultaneamente (ou em paralelo) em vez de sequencialmente, como para um script típico. Isso é chamado de processamento paralelo. Mais informações sobre o processamento paralelo estão disponíveis na página da Web de processamento paralelo .

Exemplo paralelo básico

No exemplo a seguir, duas VMs (vm0 e vm1) serão iniciadas simultaneamente, e a vm2 só será iniciada depois que vm0 e vm1 tiverem iniciado:

    Parallel
    {
        Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
        Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
    }

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg

Processamento paralelo avançado

Construções de processamento paralelo adicionais introduzem opções extras:

ForEach -Parallel

Você pode usar o constructo ForEach -Parallel para processar comandos simultaneamente para cada item em uma coleção. Os itens na coleção são processados em paralelo enquanto os comandos no bloco de script são executados sequencialmente.

No exemplo a seguir, Activity1 começa ao mesmo tempo para todos os itens na coleção. Para cada item, Activity2 é iniciado após a conclusão de Activity1. Activity3 é iniciada somente depois que Activity1 e Activity2 tiverem sido concluídos para todos os itens.

Parâmetro ThrottleLimit

O parâmetro ThrottleLimit limita o paralelismo. Um ThrottleLimit muito alto pode causar problemas. O valor ideal para o parâmetro ThrottleLimit depende de vários fatores ambientais. Tente começar com um valor ThrottleLimit baixo e, em seguida, aumente o valor até encontrar um que funcione para suas circunstâncias específicas.

ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

Exemplo de processamento paralelo do mundo real

Um exemplo prático de processamento paralelo pode ser semelhante ao seguinte código: uma mensagem é exibida para cada arquivo depois de copiada. Somente depois que todos os arquivos forem copiados a mensagem de conclusão será exibida:

    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."
    }