2011-10-20 2 views
1

저는 장기 실행 작업을 실행하기 위해 .NET 4.0의 작업 병렬 라이브러리를 사용하고 있습니다. 장시간 실행되는 작업에는 여러 단계가 있으며 각 단계에서 텍스트 파일이나 db에 일부 정보를 기록하려고합니다. 모든 단계에서 로그 메서드를 호출하는 대신 게시자/구독자 패턴을 사용하는 것으로 생각했습니다. 즉, 모든 단계에서 일부 이벤트는 장기 실행 작업에서 해고되어야하고 다른 클래스는 해당 이벤트를 수신하고 이벤트에서 적절한 정보를 기록해야합니다. 목적.작업 병렬 라이브러리가있는 이벤트

멀티 스레드 환경에서 이벤트를 사용하는 것에 대해서는 명확하지 않습니다. TPL에서 이벤트를 사용하는 것이 좋은 생각입니까? 어떻게 할 수 있습니까? 몇 가지 제안을 찾고 ..

답변

0

당신이 묘사하는 것은 정확히 "Event based Asynchronous"패턴입니다. BCL에서도 다양한 클래스에 의해 구현되고 있습니다. 예 : WebClient 클래스에는 DownloadStringAsync 메서드가있어 다른 스레드에서 다운로드를 시작합니다 (TPL 또는 기타 사용).이 클래스는 DownloadStringCompleted 및 DownloadProgressChanged를 노출합니다.이 메서드는 장기 실행 작업에서 완료되는 단계와 정확히 일치합니다.

기본적으로이 패턴을 구현하면 좋습니다. 이 이벤트는 작업이 실행되는 스레드에서 발생하므로 이러한 이벤트의 처리기가이 사실을 알고 있는지 확인해야한다는 것을 기억해야합니다.

+0

답장을 보내 주셔서 감사합니다. 이벤트 핸들러는 이벤트가 발생하는 스레드에서 실행됩니다. rgt? – VJAI

+0

@Mark : 예, 맞습니다. 이벤트는 위임자 목록과 동일하므로 기본적으로 이벤트를 발생시킬 때 목록의 각 대리자가 하나씩 실행됩니다. – Ankur

관련 문제