Question

Je m'interrogeais sur l'utilisation appropriée de ManualWorkflowSchedulerService.RunWorkflow (). Dois-je synchroniser les appels au même workflowInstanceId sur plusieurs threads lorsque j'appelle ManualWorkflowSchedulerService.RunWorkflow?

Était-ce utile?

La solution

Non, je ne le pense pas. Vous trouverez ci-dessous un extrait pertinent du book "

  

Bien que les opérations sur   WorkflowInstance peut être appelé sur   threads arbitraires, le planificateur WF   hébergé dans l'instance de programme est   desservi par un seul fil. Le WF   le runtime garantit qu'aucun autre   le fil peut interférer ou servir le   programmateur alors que sa boucle de répartition est   traiter activement les éléments de travail. Être   clair, l'application d'hébergement peut   invoquer les méthodes de WorkflowInstance le   séparer les threads simultanément - ceci   n'affecte pas le planificateur   exécuter les activités sur un   fil dédié (pour un épisode de   exécution).

EDIT: pour approfondir le problème, j'ai créé un fichier wf avec un ParallelActivity contenant deux activités HandleExternalEvent . Le gestionnaire appelé de chaque activité met simplement son thread en veille pendant 3 secondes. Dans le programme hôte, j'ai créé deux threads et déclenché les deux événements via le service. De plus, je sous-classe le ManualWorkflowSchedulerService afin de suivre sa méthode Schedule . Voici les résultats (le temps est en dixièmes de ms):

Src    Time Thread
HOST   7616      1 CreateWorkflow
MWSS   7642      1 Schedule workflow
HOST   8297     12 Trigger event 1 and wait for RunWorkflow
MWSS   8316     12 Schedule workflow
  WF   8327     12 Handler 1 Invoked...wait 3 sec
HOST   8327      1 Press any key to exit...
HOST   8767     13 Trigger event 2 and wait for RunWorkflow
MWSS   8784     13 Schedule workflow
  WF  38319     12 Handler 1 Completed
  WF  38406     12 Handler 2 Invoked...wait 3 sec
  WF  68396     12 Handler 2 Completed
HOST  68573     13 RunWorkflow for event 2 completed in 5,98 sec
HOST  68794     12 WorkflowCompleted
HOST  68795     12 RunWorkflow for event 1 completed in 6,05 sec

Quelques remarques:

  1. Le planificateur utilise toujours le thread de l'hôte pour planifier le workitem.
  2. L'instance de flux de travail n'utilise pas toujours le thread de l'hôte pour exécuter les activités. Si une autre activité est déjà en cours d'exécution dans un fil, ce fil est utilisé pour exécuter toutes les activités planifiées.
  3. L'exécution des gestionnaires est sécurisée pour les threads, mais les deux threads attendent que les deux gestionnaires se terminent!

Si ce dernier problème vous concerne, je suggérerais les articles suivants:

BTW, pouvez-vous partager des informations sur le scénario auquel vous êtes confronté?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top