Examinar o ponto de verificação e o processamento paralelo
Os fluxos de trabalho permitem implementar 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 ponto de verificação.)
Se um fluxo de trabalho terminar em um erro ou for suspenso, na próxima vez que ele for executado, ele começará em 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 .
Por exemplo, se ocorrer uma exceção após Activity2, o fluxo de trabalho terminará no código de exemplo a seguir.
Quando o fluxo de trabalho é executado novamente, ele começa com Activity2, seguido logo 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.
Ele é conhecido como processamento paralelo. (Mais informações sobre o processamento paralelo estão disponíveis na página da Web Processamento paralelo.)
No exemplo a seguir, duas VMs vm0 e vm1 serão iniciadas simultaneamente e vm2 só será iniciada depois que vm0 e vm1 iniciarem.
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
Outro exemplo de processamento paralelo seriam os seguintes constructos que introduzem algumas 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 em sequência.
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.
- ThrottleLimit – Usamos o parâmetro ThrottleLimit para limitar 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>
Um exemplo do mundo real pode ser semelhante ao código a seguir: uma mensagem é exibida para cada arquivo depois que ele é copiado. 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."
}