Pergunta

Estou a planear utilizar a máquina de WorkFlow Estado do Windows Fluxos de trabalho.

A máquina de estado vai receber eventos a partir de dois segmentos separados, a máquina de estado, naturalmente, irá tanto a mudança seu estado e executar ações com base em seu estado atual eo evento que entrou.

A minha pergunta é, é a máquina de estado do Windows Workflow o segmento de seguros, o que significa que ele vai garantir a mudança de estado correto quando dois threads acessá-lo, ao mesmo tempo?

Foi útil?

Solução

execução de fluxo de trabalho segue as convenções de apartamento single-threaded - ou seja, uma instância específica de um fluxo de trabalho só pode ser executado por um thread por vez dentro de qualquer tempo de execução. Isso ocorre por design.

O tempo de execução de fluxo de trabalho utiliza uma fila de programação interna para executar operações para casos de fluxo de trabalho, de modo que duas roscas que invocam operações no mesmo exemplo, o fluxo de trabalho será em série para a fila do programador primeiro, em seguida, invocado em sequência, quer por um novo segmento agendado pelo tempo de execução (agendamento padrão) ou pelo fio doados pelo contexto chamando para cada operação (programação manual).

Ao usar o serviço de persistência, o tempo de execução do fluxo de trabalho também garante que a versão do banco de dados é sincronizado, bem como - outro tempo de execução do fluxo de trabalho em execução em outro processo / máquina não pode carregar a mesma instância do fluxo de trabalho de persistência se ele está atualmente aberto por um outro tempo de execução do fluxo de trabalho.

Isso significa que você não tem que se preocupar com fios de segurança no código em execução dentro de um modelo de fluxo de trabalho (por exemplo, você não tem que setters de propriedade de bloqueio), e você não tem que se preocupar com as condições de corrida .

Outras dicas

Qual é a sua interpretação deste tipo de coisa na documentação da Microsoft para (por exemplo) a State atividade de classe em System.Workflow.Activitie:

Segurança de thread Qualquer membro público static (Shared no Visual Basic) os membros desse tipo são segmento seguro. Os membros de instância não são garantido para ser thread-safe.

passagens similares são dadas em muitas classes relevent. Minha conclusão é "não" não thread seguro para o uso que você está pretendendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top