2011-02-12 3 views
0

내 프로젝트는 여러 출처에서 데이터를 수집해야하며 그 데이터 수집 완료에 따라 작업을 수행해야합니다. 수집 작업 중 일부는 이전 수집 작업에 종속됩니다. TPL은 선행 연구에서 자연스럽게 계속 수행되기 때문에 좋은 결과를 얻었으며 결과를 사용하는 "최종"작업은 다시 부양 가족입니다. 큰. 그러나 우리는 "최종"과제가 완료 될 때 시작되는 "수면과 재검토"작업을 원합니다. 이 작업의 직업은 논리적으로 "최종"작업의 선행이되고 다음주기를 시작합니다. 실제로 TPL의 DAG는 주기적으로되거나 순차적으로 생각하면 루프가됩니다.TPL에서 순환 작업 그래프를 어떻게 만들겠습니까? 그리고/또는 가능합니까?

이주기 요구 사항을 TPL API 내에서 완벽하게 표현할 수 있습니까? 그렇다면 어떻게? 우리의 현재 구현 대신 이력에 WaitAll() 다음 WaitAll()와 작업 그래프를 재 구축하여 다음 잠을 수행하는 위임 주어진 Task.StartNew() 않습니다. 이것은 작동하지만 조금 인공적인 것 같습니다.

답변

0

여기에는 몇 가지 옵션이 있습니다. 지금하고있는 일은 합리적인 것 같습니다.

그러나 잠재적으로 생산자/소비자 시나리오로 BlockingCollection<T>을 사용하여 전체 작업을 설정할 수 있습니다. 소비하는 enumerable이 WaitAll이 완료된 후에 설정된 ManualResetEvent을 사용하는 경우 지금 작성한대로 작업을 사용하여 한 번에 하나의 "항목"을 사용할 수 있습니다.

즉, TPL Dataflow 라이브러리 (CTP)의 완벽한 후보로 보입니다.

관련 문제