수동 작업 플로우 시드 디어 서비스 서비스의 스레드 안전성

StackOverflow https://stackoverflow.com/questions/293121

  •  08-07-2019
  •  | 
  •  

문제

수동 Workflowschedulerservice.runworkflow ()의 적절한 사용에 대해 궁금했습니다. ManualWorkFlowSchedulerService.runworkFlow를 호출 할 때 스레드를 통해 동일한 WorkFlowInstanceId와 호출을 동기화해야합니까?

도움이 되었습니까?

해결책

아니요, 그렇게 생각하지 않습니다. 다음은 다음과 관련하여 발췌 한 것입니다 '필수 Windows Workflow Foundation'을 예약

워크 플로 싱턴스에서의 작업은 임의의 스레드에서 호출 할 수 있지만 프로그램 인스턴스 내에서 호스팅 된 WF 스케줄러는 단일 스레드에 의해 서비스됩니다. WF 런타임은 다른 스레드가 스케줄러를 방해하거나 서비스하는 동안 디스패처 루프가 작업 항목을 적극적으로 처리하는 것을 보장합니다. 명확하게 말하면, 호스팅 응용 프로그램은 별도의 스레드에서 워크 플로 싱턴스 메소드를 동시에 호출 할 수 있습니다. 이는 전용 스레드에서 활동을 실행하는 스케줄러에 영향을 미치지 않습니다. (실행 에피소드).


편집 : 문제를 더 조사하기 위해 WF를 ParallelActivity 두 개가 포함되어 있습니다 HandleExternalEvent 활동. 그만큼 invoked 각 활동의 핸들러는 단순히 3 초 동안 실을 잠들게합니다. 호스트 프로그램에서는 두 개의 스레드를 만들고 서비스를 통해 두 이벤트를 트리거했습니다. 또한, 나는 서브 클래스를 ManualWorkflowSchedulerService 추적하기 위해 Schedule 방법. 결과는 다음과 같습니다 (시간은 MS의 10 분의 1).

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

몇 가지 발언 :

  1. 스케줄러는 항상 호스트의 스레드를 사용하여 Workitem을 예약합니다.
  2. 워크 플로 인스턴스 항상 그런 것은 아닙니다 호스트의 스레드를 사용하여 활동을 실행하십시오. 다른 활동이 이미 스레드에서 실행중인 경우이 스레드는 모든 예정된 활동을 실행하는 데 사용됩니다.
  3. 핸들러의 실행은 스레드 안전이지만 두 스레드는 두 핸들러를 기다립니다.

후자가 당신의 관심사라면 다음 게시물을 제안합니다.

BTW, 직면하고있는 시나리오에 대한 정보를 공유 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top