0

Je prévois d'utiliser le WorkFlow State Machine de Windows Workflows.Le StateMachine sur Windows WorkFlow Thread Safe?

La machine d'état va recevoir des événements de deux threads séparés, la machine d'état de cours à la fois changer son état et d'exécuter des actions en fonction de son état actuel et l'événement qui est venu.

Ma question est, est la machine d'état de threads workflow Windows en toute sécurité, ce qui signifie qu'il garantira le changement d'état correct lorsque deux threads y accèdent en même temps?

Répondre

4

L'exécution du flux de travail suit des conventions d'unité monothread - c'est-à-dire qu'une instance particulière d'un workflow ne peut être exécutée que par un thread à la fois dans n'importe quelle exécution. C'est par conception. Le runtime du workflow utilise une file d'attente de planification interne pour exécuter des opérations pour les instances de workflow. Deux threads invoquant des opérations sur la même instance de workflow seront d'abord sérialisés dans la file d'attente du planificateur, puis invoqués en séquence par un nouveau thread. runtime (programmation par défaut) ou par le thread donné par le contexte appelant pour chaque opération (planification manuelle). Lors de l'utilisation du service de persistance, l'exécution du workflow garantit également la synchronisation de la version de la base de données: un autre processus s'exécutant sur un autre processus/machine ne peut pas charger la même instance de workflow si elle est actuellement ouverte par un autre workflow. . Cela signifie que vous n'avez pas à vous préoccuper de la sécurité des threads lors de l'exécution de code dans un modèle de workflow (par exemple, vous n'avez pas besoin de verrouiller les paramètres de propriété) et vous n'avez pas à vous soucier de la course conditions.

1

Quelle est votre interprétation de ce genre de chose dans la documentation Microsoft pour (par exemple) le State Activity CLass en System.Workflow.Activitie: membres

Sécurité des threads Tout public static (Shared en Visual Basic) de ce type sont thread en toute sécurité. Tous les membres d'instance ne sont pas garanti être thread-safe.

Des passages similaires sont donnés dans de nombreuses classes pertinentes. Mon inférence est "non" pas thread sécurisé pour l'usage que vous avez l'intention.

+0

Je ne suis pas sûr que cela s'appliquera à Windows WorkFlow. Étant donné que la plupart des opérations sur Windows WorkFlow sont effectuées pour vous, elles se comportent davantage comme un cadre que comme des classes que vous manipulez. – aattia

+0

Ceux-ci sont explicitement sur la documentation des classes de Windows Workflow. Si vous appelez une API, vous devez vous préoccuper de la sécurité des threads - la documentation que j'ai trouvée semble assez explicite. Je pense qu'il est raisonnable de supposer que les aspects du cadre de Windows Workflow lui-même le fera correctement et synchronisera si nécessaire. Cela peut vous aider si vous nous montrez un croquis de l'endroit où votre deisgn se soucie de cela. – djna

Questions connexes