프로세스를 타임아웃되기 전까지만 수행하려면

프로세스를 실행하다보면 중간에 hang 되어 무한히 멈추는 경우가 종종 있습니다. 이런 현상이 발생하면 관리자가 프로세스를 강제로 종료해주어야 로봇이 다음 작업을 수행할 수 있습니다.

프로세스를 정해준 시간까지만 수행하도록 타임아웃을 도입하면 이 문제를 해결할 수 있습니다. 프로세스 수행 중 타임아웃에 도달하면 실행을 멈추도록 하면 되는데, 이런 용도로 사용할 수 있는 워크플로우를 아래와 같이 parallel activity를 이용하여 작성할 수 있습니다.

RunWithTimeout.xaml (11.1 KB)

변수 Timeout에 프로세스가 수행할 수 있는 최대 시간을 지정하고, parallel activity의 “The task” 부분에 수행할 워크플로우를 넣어줍니다. 오른쪽의 “Check for timeout” 부분에서 주기적으로 타임아웃을 확인하는 방법입니다. 타임아웃에 도달할 때까지 수행이 완료되지 않으면 (ExecutionCompleted 플래그가 set 되지 않으면) exception을 발생시켜서 작업을 종료할 수 있도록 해줍니다.

Pick activity를 사용하여 프로세스의 타임아웃을 구현하는 것은 바람직하지 않습니다. Pick은 주어진 이벤트 트리거 중에 먼저 끝나는(발생하는) 이벤트의 action 파트(이벤트 핸들러)를 실행하고, 나머지 이벤트 트리거들의 수행은 모두 취소하는 방식으로 작동합니다. 이벤트 트리거에는 이벤트 발생을 감지하기 위한 최소한의 로직만 포함해야 하고, 절대 아래와 같이 작성하면 안됩니다.

Pick activity 사용법에 대한 상세한 가이드라인은 아래의 마이크로소프트 문서를 참고하시기 바랍니다.

https://docs.microsoft.com/en-us/dotnet/framework/windows-workflow-foundation/pick-activity

3 Likes