我很想知道ManualWorkflowSchedulerService.RunWorkflow()的正确用法。当我调用ManualWorkflowSchedulerService.RunWorkflow时,是否需要跨线程同步调用同一个workflowInstanceId?
答案 0 :(得分:3)
不,我不这么认为。以下是book 'Essential Windows Workflow Foundation'
的相关摘录虽然操作上 可以调用WorkflowInstance 任意线程,WF调度程序 在程序实例中托管的是 由单个线程提供服务。 WF 运行时保证没有其他 线程可以干扰或服务 调度程序循环的调度程序 积极处理工作项目。 要成为 明确,托管应用程序可以 调用WorkflowInstance的方法 并发线程 - 这个 不会影响调度程序 在a上执行活动 专用线程(适用于 执行)。
编辑:为了进一步调查此问题,我创建了一个wf,其ParallelActivity
包含两个HandleExternalEvent
个活动。每个活动的invoked
处理程序只是让其线程休眠3秒钟。在宿主程序中,我创建了两个线程并通过服务触发了两个事件。此外,我将ManualWorkflowSchedulerService
子类化,以便跟踪其Schedule
方法。结果如下(时间以毫秒为单位):
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
一些评论:
如果您担心后者,我会建议以下帖子:
顺便说一下,你能分享一些关于你所面临的情景的信息吗?