Bloquear atividade fluxo de trabalho

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 3 min. de leitura
  • A atividade de bloqueio impede que outras instâncias deste fluxo de trabalho continuem após esta atividade até que o bloqueio seja liberado.

    Várias instâncias do mesmo fluxo de trabalho podem ser executadas simultaneamente. Por exemplo, se um fluxo de trabalho for acionado quando um registro for adicionado a uma tabela específica. Esse fluxo de trabalho será acionado várias vezes se vários registros forem adicionados um após o outro, uma vez para cada inserção de registro. Você pode usar a atividade de bloqueio para garantir que esta instância do fluxo de trabalho tenha concluído uma ou mais atividades antes que qualquer outra instância do fluxo de trabalho possa prosseguir.

    Um fluxo de trabalho pode liberar explicitamente um bloqueio com a atividade de desbloqueio. O bloqueio também pode ser liberado quando a duração máxima é atingida.

    Quando uma instância do fluxo de trabalho atinge a atividade de bloqueio, ela tenta obter um bloqueio usando a chave especificada na atividade de bloqueio. Se outra instância já obteve o bloqueio e ainda não o liberou, essa tentativa de bloqueio falhará. A instância continua tentando obter o bloqueio até que o máximo de tentativas seja atingido.

    Nota:

    Recomendamos colocar uma atividade de temporizador de um segundo antes da atividade de bloqueio. Isso ajuda a evitar uma condição rara em que a atividade de bloqueio pode não ser capaz de distinguir uma instância de fluxo de trabalho de outra. Esta condição pode ocorrer porque a entidade que possui o bloqueio não é a instância de fluxo de trabalho específica, mas sim o thread de execução de código no qual essa instância está sendo executada. Na maioria dos casos, cada instância de fluxo de trabalho é executada em um thread diferente. Adicionar uma atividade de temporizador garante que este seja o caso.

    Figura 1. Exemplo de atividade de bloqueio precedida por atividade do temporizador
    Fluxo de trabalho com atividade de temporizador antes da atividade de bloqueio
    Como uma atividade de bloqueio só pode impedir temporariamente o processamento de outras instâncias de fluxo de trabalho, não adicione atividades que façam com que o fluxo de trabalho espere entre um bloco de atividades de bloqueio e desbloqueio. Isso pode fazer com que a atividade de desbloqueio não consiga adquirir o bloqueio para liberá-lo e, em vez disso, levar 60 segundos para ser concluído. As atividades de espera restritas incluem:
    • Atividades de aprovação
    • Atividades da tarefa
    • Atividades do temporizador
    • Atividade condicional Aguardar
    • Atividade Aguardar Evento de WF
    • Atividades do MID Server, como um script do PowerShell

    Resultados

    Tabela 1. Resultados da atividade bloqueio
    Resultado Descrição
    Êxito A atividade obteve um bloqueio com sucesso. Esta instância do fluxo de trabalho pode prosseguir além deste ponto, mas outras instâncias não podem prosseguir até que o bloqueio seja liberado.
    Falha Depois de tentar obter os tempos máximos de tentativas de bloqueio, a atividade não pôde obter o bloqueio.

    Variáveis de entrada

    As variáveis de entrada determinam o comportamento inicial da atividade.

    Tabela 2. Variáveis de entrada da atividade de bloqueio
    Campo Descrição
    Chave Uma chave mutex exclusiva A atividade de desbloqueio usa esta chave para liberar o bloqueio.
    Duração
    Duração máxima O tempo máximo em que o bloqueio persiste. O bloqueio é liberado após atingir essa duração. Liberar um bloqueio desta forma é equivalente a executar a atividade de desbloqueio.
    Tentativas de bloqueio

    Especifique como a atividade se comportará se a tentativa de bloqueio for negada. Se a tentativa de bloqueio final falhar, o estado da atividade será definido como 'tempo limite' e o resultado da atividade será definido como 'falha'.

    Máximo de tentativas Especifique o número máximo de vezes que a atividade pode tentar obter o bloqueio.
    Atraso entre tentativas A quantidade de tempo necessária após uma tentativa de bloqueio com falha antes que outra tentativa de bloqueio seja permitida.

    Estados

    O estado da atividade informa ao mecanismo de fluxo de trabalho o que fazer com a atividade.

    Tabela 3. Estados da atividade de bloqueio
    Estado Descrição
    Aguardando O mecanismo de fluxo de trabalho está aguardando para obter um bloqueio.
    Terminado A atividade obteve o bloqueio com sucesso.
    Tempo limite A atividade não pôde obter um bloqueio dentro do número de tentativas especificado pela variável de entrada Máximo de tentativas.