문제

Windows 워크 플로우의 상태 머신 워크 플로우를 사용할 계획입니다.

State Machine은 두 개의 별도 스레드에서 이벤트를 수신 할 것이며, 상태 기계는 현재 상태와 현재 상태와 이벤트에 따라 상태를 변경하고 동작을 실행합니다.

내 질문은, Windows 워크 플로 스레드의 상태 머신이 안전합니까? 즉 두 스레드가 동시에 액세스 할 때 올바른 상태 변경을 보장 할 것입니까?

도움이 되었습니까?

해결책

워크 플로 실행은 단일 스레드 아파트 컨벤션을 따릅니다. 즉, 워크 플로의 특정 인스턴스는 런타임 내에 한 번에 하나의 스레드 만 실행할 수 있습니다. 이것은 디자인에 의한 것입니다.

워크 플로 런타임은 내부 스케줄링 큐를 사용하여 워크 플로 인스턴스에 대한 작업을 실행하므로 동일한 워크 플로 인스턴스에서 작업을 호출하는 두 개의 스레드가 먼저 스케줄러 큐에 직렬화 된 다음 런타임 (기본 스케줄링에 의해 예약 된 새 스레드로 순서대로 호출됩니다. ) 또는 각 작업에 대한 호출 컨텍스트 (수동 일정)에 의해 기증 된 스레드에 의해.

Persistence Service를 사용할 때 워크 플로 런타임은 데이터베이스 버전도 동기화되도록합니다. 다른 프로세스 / 컴퓨터에서 실행되는 다른 워크 플로 런타임은 현재 다른 워크 플로 런타임으로 열린 경우 지속성에서 동일한 워크 플로 인스턴스를로드 할 수 없습니다.

즉, 워크 플로우 모델 내에서 실행되는 코드의 스레드 안전성에 관심이 없음을 의미하며 (예 : 속성 세터를 잠글 필요가 없습니다) 레이스 조건에 관심이 필요하지 않습니다.

다른 팁

(예 : 주 활동 수업 system.workflow.activitie :

스레드 안전이 유형의 공개 정적 (시각적 기본 공유) 멤버는 스레드 안전합니다. 모든 인스턴스 멤버는 스레드 안전을 보장하지 않습니다.

많은 관련 수업에서도 비슷한 구절이 제공됩니다. 내 추론은 의도 한 사용에 대해 스레드 안전하지 않다는 것입니다.

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