간단한 예제에서 내 문제를 설명하고 더 가까운 문제를 설명합니다.그룹의 병렬 실행
상자 1에 [i1, i2, i3, i4, ...]가 있고 항목을 처리 할 수있는 상자 2가 있습니다 (일반적으로 m은 n보다 훨씬 적음). 각 항목에 필요한 시간이 다릅니다. 나는 모든 항목이 진행될 때까지 항상 m 직업 품목을하고 싶다.
훨씬 더 가까운 문제는 파일의 n 개의 문자열 (URL 주소) 목록 1을 가지고 있고 시스템이 m 개의 파일을 동시에 다운로드하도록하려는 경우 (예 : httpclient.getAsync() 메소드를 통해) . m 개의 항목 중 하나의 다운로드가 끝날 때마다 list1의 다른 나머지 항목을 최대한 빨리 대체해야하며 List1 항목이 모두 진행될 때까지이 항목을 계승해야합니다. (n 및 m의 번호는 런타임에 사용자 입력에 의해 지정됩니다)
어떻게 수행 할 수 있습니까? 동시 작업의 수를 제한 병렬
을 할 수있는 또 다른 방법이며, Parallel.ForEach 때
편집
약간의 변경 후 코드는 이제 작업을 생성 비동기를 지원하지 않습니다. –
이 방법은 내 문제에서 작동하지 않습니다. Parallel.ForEach를 비동기 메소드와 함께 사용할 수 없기 때문입니다. 비동기 메소드와 함께 Parallel.ForEach를 사용하는 경우 모든 작업이 즉시 시작됩니다 (비동기 작업 완료까지 기다리지 않습니다). 비동기 메서드 인 HttpClient.getAsync를 사용하고 있습니다. –