TPL에 대한 문서 및 많은 자습서를 읽었지만 달성하고자하는 모델은 없습니다..NET 작업 병렬 라이브러리
일부 알고리즘에는 항상 고정 된 수의 반복이있었습니다.
나는 항상 (가능한 한 많은으로) 스레드를 실행 필요 :
동안
- 메인 스레드에서 데이터를 얻을 (참)
- (별도의 스레드에서) 무거운 시간이 많이 걸리는 작업을 수행
- 갱신 메인 쓰레드 정보
는 Additionaly 나는 ABL 될 것이다 메커니즘이 필요 전자 시계 설정 (예 : 5 초). 5 초 후에 모든 작업을 잠시 중단 한 다음 다시 시작해야합니다.
Task.ContinueWith 같은 작업을 사용해야합니까? 그러나 이전 작업 실행 결과를 처리하지 않고 대신 MAIN 스레드에서 데이터 구조를 업데이트 한 다음 새 작업 반복의 입력 내용을 결정합니다. ...
얼마나 많은 작업을해야합니까? 효율성을 극대화하기 위해 만들어야합니까?
아니요. 좋은 RunEventCompleted 이벤트가 있기 때문에 BackgroundWorkers를 사용하고 있습니다. 메인 구조를 업데이트하고 시간 제약 조건을 확인한 다음 결국 완료된 BackgroundWorker에서 다시 StartAsync를 호출 할 수 있습니다. 그것은 훌륭하고 명확하지만, 아마도 매우 불편합니다. 멀티 프로세서, 멀티 코어 서버에서 매우 효율적으로 만들 필요가 있습니다.
하나의 문제는 계산이 항상 온라인 상태이며 중단되지 않는다는 것입니다. MAIN 구조의 현재 상태를 원격으로 묻는 네트워킹도 있습니다.
두 번째 문제는 중요한 시간 제어입니다 (정확한 타이머가 있어야합니다 - 멈출 때 스레드를 다시 시작할 수 없음). 끝나면 특별한 최우선 과제가 나오고 모든 연구가 재개됩니다.
세 번째 문제는 수행 할 작업의 상한이 없다는 것입니다.
내가 관찰 한 이러한 세 가지 제약 조건은 TPL을 잘 따라 가지 않습니다. Parallel.For와 같은 것을 사용할 수 없습니다. 실시간으로 작업 자체의 결과에 따라 컬렉션이 수정되기 때문입니다 ... I do not 결합하는 방법도 알고 TPL 한 번만
- 능력을 처음에는 항상 새로운 PA로 다시 시작해야합니다. rameters)
누군가가 내게 단서를 줄 수 있습니까? 나는 그것을 나쁜, 비효율적 인 방법으로하는 법을 안다. 내가 설명했던 몇 가지 작은 요구 사항이 있는데, 이는 내가이 권리를하지 못하게합니다. 나는 조금 혼란 스럽다.
원래 질문에 답변 한 것으로 보이고 새 질문이 무엇인지 잘 모릅니다. – Jodrell